繁体   English   中英

多进程将无法在Jupyter Notebook的Windows上并行运行

[英]Multiprocesses will not run in Parallel on Windows on Jupyter Notebook

我目前正在使用jupyter笔记本电脑在Windows上工作,并且一直在努力使多进程工作。 它不会并行运行我所有的异步程序,而是一次运行一个异步程序,请提供一些指导以解决我的问题。 我需要将结果放入变量中,以备将来使用。 我不明白什么?

import multiprocessing as mp
import cylib
Pool = mp.Pool(processes=4)
result1 = Pool.apply_async(cylib.f, [v]) # evaluate asynchronously 
result2 = Pool.apply_async(cylib.f, [x]) # evaluate asynchronously
result3 = Pool.apply_async(cylib.f, [y]) # evaluate asynchronously 
result4 = Pool.apply_async(cylib.f, [z]) # evaluate asynchronously

vr = result1.get(timeout=420) 
xr = result2.get(timeout=420)
yr = result3.get(timeout=420) 
zr = result4.get(timeout=420)

这些任务正在并行执行。

但是,这将同步获取结果,即“等到result1准备好,然后等到result2准备好,..”,依此类推。

vr = result1.get(timeout=420) 
xr = result2.get(timeout=420)
yr = result3.get(timeout=420) 
zr = result4.get(timeout=420)

考虑下面的示例代码,其中每个任务都是异步轮询的

from time import sleep
import multiprocessing as mp
pool = mp.Pool(processes=4)

# Create tasks with longer wait first
tasks = {i: pool.apply_async(sleep, [t]) for i, t in enumerate(reversed(range(3)))}
done = set()


# Keep polling until all tasks complete
while len(done) < len(tasks):

    for i, t in tasks.items():

        # Skip completed tasks
        if i in done:
            continue

        result = None

        try:
            result = t.get(timeout=0)
        except mp.TimeoutError:
            pass
        else:
            print("Task #:{} complete".format(i))
            done.add(i)

您可以复制上述内容,也可以在apply_async上使用callback参数在任务完成时自动执行一些处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM