gpt4 book ai didi

Python 多处理 apply_async 仅使用一个进程

转载 作者:行者123 更新时间:2023-12-01 03:48:09 26 4
gpt4 key购买 nike

这是我的代码:

import multiprocessing
import time
import os

def worker():
print str(os.getpid()) + " is going to sleep..."
time.sleep(1)
print str(os.getpid()) + " woke up!"
return

if __name__ == "__main__":
pool = multiprocessing.Pool(processes = 8)
for _ in range(5):
pool.apply_async(worker())

我的输出:

23173 is going to sleep...
23173 woke up!
23173 is going to sleep...
23173 woke up!
23173 is going to sleep...
23173 woke up!
23173 is going to sleep...
23173 woke up!
23173 is going to sleep...
23173 woke up!

该输出按顺序出现,显然所有输出都具有相同的 id。我期望看到的是 5 个独立的进程,警告它们将要 sleep ,然后在相似的时间醒来。

为什么这没有发生?我在 stackoverflow 和其他网站上做了很多研究,似乎每个人都确信这应该跨多个进程应用“worker”可调用,但事实似乎并非如此。

最佳答案

您正在调用worker函数,因此当前进程执行该代码,然后执行结果worker(即None)被传递给apply_asynch,它不执行任何操作。

将其更改为 pool.apply_asynch(worker)通过这种方式,函数 worker 被传递给执行它的子进程。

<小时/>

明确地说,问题在于这之间的区别:

>>> def worker():
... print('Hi there!')
...
>>> def f(func):
... print('Received', func)
... func()
...
>>> f(worker())
Hi there!
Received None
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in f
TypeError: 'NoneType' object is not callable

还有这个:

>>> f(worker)
Received <function worker at 0x7f5cd546f048>
Hi there!

请注意,前者的行顺序错误并产生 TypeError。不幸的是,Pool.apply_asynch 默认情况下会静默异常。不过,您可以处理传递额外参数的错误。

关于Python 多处理 apply_async 仅使用一个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38644254/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com