多处理在 .get() 之后卡住

Multiprocessing goes stuck after .get()

我正在尝试了解 multiprocessing 在 python 中的工作原理,但遇到了一些问题。 这是示例:

import multiprocessing

def func():
    return 1

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

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

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

中添加这两行

所以现在您的代码必须看起来像

import multiprocessing

def func():
    return 1

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

如果将其作为导入调用,将导致新进程的无限序列。并将它们添加到 if 块中是可行的,因为 if 语句不会在导入期间执行。

我没有足够的细节来确切知道问题出在哪里。 但我有很强的猜测,把这些线:

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()

告诉我它是否有效:)