gpt4 book ai didi

python - 何时在 Gevent 中使用线程池

转载 作者:太空狗 更新时间:2023-10-29 17:07:20 26 4
gpt4 key购买 nike

我注意到 Gevent 有线程池对象。有人可以向我解释何时使用线程池以及何时使用常规池吗? gevent.threadpool 和 gevent.pool 有什么区别?

最佳答案

当你有一段需要很长时间运行(几秒钟)并且不会导致 greenlets 切换的 python 代码时,所有其他 greenlets/gevent 作业将“饿死”并且没有计算时间,它看起来像您的应用程序“挂起”。

如果您将这个“繁重”的任务放在线程池中,线程执行将确保其他 greenlet 不会饿死。但我相信如果你的代码在 C 库中花费大量时间,它不会有任何效果。

下面是来自 gevent 的示例.请注意,该示例使用 time.sleep 而不是 gevent.sleep

提示:如果你有一个需要很长时间运行的循环,那么你可以在循环中放入一个 gevent.sleep(0) 。其他 greenlets 的每个循环都有机会运行。慢速循环中的 gevent.sleep(0) 将确保其他 greenlet 不会饿死并且应用程序显示响应

import time
import gevent
from gevent.threadpool import ThreadPool


pool = ThreadPool(3)
start = time.time()
for _ in xrange(4):
pool.spawn(time.sleep, 1)
gevent.wait()
delay = time.time() - start
print 'Running "time.sleep(1)" 4 times with 3 threads. Should take about 2 seconds: %.3fs' % delay

关于python - 何时在 Gevent 中使用线程池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18411183/

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