我有一个微不足道的可并行化的内存问题,但是由于需要在进程之间来回发送大量数据,因此使用常规的Python多处理(仅2xish)不会带来很大的提速。希望有帮助。
我的代码基本上是这样的:
delayed_results = []
for key, kdf in natsorted(scdf.groupby(grpby_key)):
d1 = dd.from_pandas(kdf, npartitions=1)
d2 = dd.from_pandas(other_dfs[key], npartitions=1)
result = dask.delayed(function)(d1, d2, key=key, n_jobs=n_jobs, **kwargs)
delayed_results.append(result)
outdfs = dask.compute(*delayed_results)
这是我的旧作业库代码的样子:
outdfs = Parallel(n_jobs=n_jobs)(delayed(function)(scdf, other_dfs[key], key=key, n_jobs=n_jobs, **kwargs) for key, scdf in natsorted(scdf.groupby(grpby_key)))
但是,对于线程调度程序和多处理调度程序而言,轻快的代码要慢得多,并且要消耗更多的内存。我希望可以使用dask来并行化任务,而无需将内容发送给其他进程。有没有一种方法可以通过使用共享内存来同时使用多个进程?
顺便说一句。文档引用了http://distributed.readthedocs.io/en/latest/local-cluster.html,在该文档中解释了此计划程序
它以更复杂的方式处理数据局部性,因此可以更多 在需要的工作负载上比多处理调度程序更高效 多个过程。
但是他们没有使用它的例子。我应该用上面的代码替换dask.compute()
调用以尝试本地集群吗?
答案 0 :(得分:1)
所以您可以执行以下操作
wgt
默认情况下,分布式将自己注册为执行程序,您可以照常使用dask.compute