【发布时间】:2017-06-02 01:49:20
【问题描述】:
我们有一个包含大量任务的大型项目。我们使用 dask 图来安排每个任务。该图的一个小样本如下。请注意,dask 设置为多处理模式。
dask_graph:
universe: !!python/tuple [gcsstrategies.svc.business_service.UniverseService.load_universe_object, CONTEXT]
raw_market_data: !!python/tuple [gcsstrategies.svc.data_loading_service.RDWLoader.load_market_data, CONTEXT, universe]
raw_fundamental_data: !!python/tuple [gcsstrategies.svc.data_loading_service.RDWLoader.load_fundamental_data, CONTEXT, universe]
dask_keys: [raw_fundamental_data]
现在其中一个任务raw_fundamental_data 使用@delay 懒惰地安排dask 任务并使用dask.compute() 运行它们。选择这种设计的原因是,dask 在raw_fundamental_data 中将被调度和延迟运行的任务列表是在运行时根据运行时参数动态选择的。
我们看到的错误是:
守护进程不允许有子进程
我们理解这是因为一个衍生的进程试图产生子进程。这个问题有什么解决办法吗? dask 是否有任何方法允许通过 daskgraph 调度的任务使用@delay 或其他方法来调度和延迟运行自己的任务。
请注意,在我们的系统中,有许多任务将使用多处理来运行它们自己的任务。所以顺序执行不是一种选择。
【问题讨论】:
标签: python multiprocessing dask