多处理在 .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()
告诉我它是否有效:)
我正在尝试了解 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()
告诉我它是否有效:)