飞镖:同时运行两个方法,等待它们完成

时间:2018-12-26 18:55:47

标签: asynchronous dart

我正在玩dart / flutter,我想不出如何在同一时间运行两个功能并等待它们完成的过程。

显然,我应该使用isolate.spawn,但是什么也无法工作,例如:

import pandas as pd
import numpy as np
from sqlalchemy import create_engine
df = pd.read_csv("file.csv",index_col=0)
df.head()
engine = create_engine("sqlite:///db/file.sqlite")
df.to_sql("file", engine)

这两个函数运行时,对Future.wait的调用不会等待它们完成。

然后是一个问题,我该如何处理这些函数的任何返回值。

有人吗? TIA。

2 个答案:

答案 0 :(得分:0)

您的代码段无效,因为 Isolate.spawn返回的未来 如果生成成功,将以Isolate实例完成,而不是在进入点(在这种情况下为t1t2)返回时返回。

要处理产生的函数的返回值,可以使用ReceivePort。例如:

import 'dart:io';
import 'dart:isolate';

t1(port) {
  sleep(Duration(seconds: 3));
  port.send(["t1", 1]);
}

t2(port) {
  sleep(Duration(seconds: 6));
  port.send(["t2", 2]);
}

main() async {
  var receivePort = new ReceivePort();

  Isolate.spawn(t1, receivePort.sendPort);
  Isolate.spawn(t2, receivePort.sendPort);

  await for (var retMsg in receivePort) {
    print("res: $retMsg");

    if (retMsg[0] == "t2") {
      return;
    }
  }
}

答案 1 :(得分:0)

您可能会在这里发现package:isolate有用。

import seaborn as sns
ndf = pd.melt(df, id_vars="CLASS", var_name="feature", value_name="val")
sns.catplot("feature", "val", col="CLASS", data=ndf, kind="bar", col_wrap=1)
plt.show()