.get()之后,多处理卡住了

时间:2018-09-28 12:36:06

标签: python multiprocessing python-multiprocessing

我试图了解multiprocessing在python中的工作方式,并遇到了一些问题。 这是示例:

import multiprocessing

def func():
    return 1

p = multiprocessing.Pool()
result = p.apply_async(func).get()

调用.get()函数时,代码被卡住了。我在做什么错了?

2 个答案:

答案 0 :(得分:0)

您需要在if __name__ == "__main__":

内添加这两行

所以现在您的代码必须类似于

import multiprocessing

def func():
    return 1

if __name__ == "__main__":
    p = multiprocessing.Pool()
    result = p.apply_async(func).get()

如果这被称为导入,则将导致无限数量的新进程。并将它们添加到if块中是可行的,因为在导入期间不会执行if语句。

答案 1 :(得分:0)

我没有足够的细节来确切地了解问题所在。 但我确实有很强的猜测力,将这些行放进去:

p = multiprocessing.Pool()
result = p.apply_async(func).get()

函数内部将解决您的问题。

尝试一下:

import multiprocessing

def func():
    return 1

def main():
    p = multiprocessing.Pool()
    result = p.apply_async(func).get()
    print(result)

if __name__ == '__main__':
    main()

告诉我是否可行:)