首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python gevent.pool在一个线程上运行

python gevent.pool在一个线程上运行
EN

Stack Overflow用户
提问于 2015-05-01 11:04:19
回答 2查看 511关注 0票数 0

我的代码运行一个任务池,当我监控到其中一个cpu(更像是其中一个线程)的活动达到90%时,我希望工作更多的“多线程”,并在线程之间分配任务,而不是在一个线程上工作。

gevent lib在核心层而不是线程上工作?有没有其他方法可以创建池并将其分散到线程上?

代码语言:javascript
复制
group = gevent.pool.Pool(size=18)
for url in urls:
    group.spawn(scrap_content, url)
group.join()
EN

回答 2

Stack Overflow用户

发布于 2015-05-01 15:40:22

Python基本上是单线程的。gevent所做的就是为你提供一个更好的接口来使用async io。

如果需要将计算密集型工作分散到多个cpu上,则应该检查multiprocessing module

票数 0
EN

Stack Overflow用户

发布于 2015-06-26 05:05:31

Gevent使用greenlet,它是协程,而不是线程。看到所有的东西都只在一个CPU上运行是绝对正常的。

请注意,即使在Python语言中使用线程,您仍然会看到它只在一个CPU上运行,因为CPython ( Python的标准实现)不支持在不同CPU上运行多线程。

原因是臭名昭著的GIL (全局解释器锁)。python的核心不是线程安全的,因为它执行垃圾收集的方式,所以它使用锁,这意味着访问python对象的线程一个接一个地运行。

如果您需要在多个CPU上执行真正的多线程,请查看Cython (不要与CPython混淆)和"no_gil",或c扩展,或多处理模块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29981091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档