gpt4 book ai didi

python - 在 Python 中产卵后 sleep

转载 作者:太空宇宙 更新时间:2023-11-04 00:51:17 25 4
gpt4 key购买 nike

我想在 Python 中每 1 秒启动 4 个线程来做一些工作。为了确保工作每 1 秒完成一次,我在生成后插入了一个 sleep ,如以下代码片段所示。从打印来看,do_work 的执行次数似乎是 10,而我期望的是 10*4 --> 循环迭代次数 x 线程数。此外,似乎第一个线程在主循环中打印的时间 4 秒后开始工作。(我也在线程中打印了时间)。

    run_pool = GreenPool(4)
counter = 0
while counter < 10:
run_pool.spawn(self.do_work)
time.sleep(1)
counter += 1
print time.time()

最佳答案

首先,你应该read the documentation更好地了解 eventlet 的工作原理和使用方法。我自己从未使用过 eventlet,接下来的所有内容都是我浏览文档几分钟后发现的。

it seems that the number of times do_work was executed was 10 while I was expecting 10*4

GreenPool.spawn()每次调用只产生一个线程。池的大小限制了一次可以运行的线程数。如果池中的所有线程都在使用中,则 spawn 将阻塞,直到有一个线程可用。

it seems that the first thread starts to do the work after 4 second from the time printed in the main loop

您需要对 time 模块进行猴子修补,使其在休眠时自动放弃控制权。由于您还没有这样做,因此当主线程处于休眠状态时,生成的线程将无法工作。结果,线程直到循环的第 4 次迭代才运行。那时,主线程不能再产生任何线程,因此它“阻塞”并将控制权交给工作线程。

调用 eventlet.monkey_patch()在你的循环将解决问题之前。或者,使用 eventlet.sleep()而不是 time.sleep()

关于python - 在 Python 中产卵后 sleep ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36997499/

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