【问题标题】:Multiprocessing does not output anything多处理不输出任何东西
【发布时间】:2020-10-30 00:04:06
【问题描述】:

我正在尝试在池中创建一个池以并行化 for 循环。我正在尝试这样做以查看它是否比仅创建一个池来运行for 循环更快。我的问题是我编写的代码似乎从未完成运行,我不太明白为什么。 代码如下:

import numpy as np
import multiprocessing as mp
import time
cpus = mp.cpu_count() - 1

def f(x):
    lista = list(pool.map(time.sleep, [1,2,3] * x))
    print('done')
    return lista

pool = mp.Pool(cpus)
lista2 = pool.map(f, range(2))
pool.close()
pool.join()

【问题讨论】:

    标签: python multiprocessing


    【解决方案1】:

    来自文档:“请注意,池的方法只能由创建它的进程使用。”

    https://docs.python.org/3.4/library/multiprocessing.html#module-multiprocessing.pool

    还要注意Pool 启动的进程是不允许拥有自己的子进程的守护进程。这可以解释为什么您会遇到死锁。根据这篇博客文章,您应该已经看到对此提出了异常,我不确定您为什么没有遇到这种情况: https://blog.mbedded.ninja/programming/languages/python/python-multiprocessing/

    【讨论】:

    • 这是否意味着我无法更正我的代码以使其正常工作?
    • @DPM 您也许可以编写自己的池工作者来规避多处理的限制,但这可能不值得。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多