【问题标题】:Multiprocesses will not run in Parallel on Windows on Jupyter Notebook多进程不会在 Jupyter Notebook 上的 Windows 上并行运行
【发布时间】:2019-06-26 14:52:36
【问题描述】:

我目前正在 jupyter notebook 上的 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)

【问题讨论】:

  • look here。为什么你认为你在这里需要pool.apply_async()?为什么不直接使用pool.map()

标签: python python-2.7 jupyter-notebook python-multiprocessing


【解决方案1】:

任务并行执行。

但是,这是同步获取结果,即“等到 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 上的回调参数在任务完成时自动执行一些处理。

【讨论】:

    猜你喜欢
    • 2019-10-28
    • 2018-09-25
    • 1970-01-01
    • 2022-08-07
    • 1970-01-01
    • 2017-11-05
    • 2016-11-27
    • 1970-01-01
    • 2019-08-29
    相关资源
    最近更新 更多