通用多核usag

2024-09-22 16:38:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚开始使用python gevent,我想知道库的cpu/mulitcore使用情况。

我注意到,通过monkeypachedurllib执行许多请求的一些例子表明,它们只在一个内核上运行,使用99%的负载。

如何使用python使用gevent的所有核心? 有最佳实践吗?或者使用多个过程和gevent有副作用吗?

比尔 丹


Tags: 核心过程情况geventcpu内核例子副作用
1条回答
网友
1楼 · 发布于 2024-09-22 16:38:58

Gevent使您能够处理阻塞请求。它不能让你在多核上运行。

在python进程中,任何时候都只有一个greenlet(gevent的coroutine)在运行。gevent的真正好处是,它在处理I/O瓶颈时非常强大(一般情况下,通用web应用程序、服务于API端点的web应用程序、基于web的聊天应用程序或后端应用程序,通常还有网络应用程序)。当我们进行一些CPU繁重的计算时,使用gevent将获得no性能增益。当一个应用程序被I/O绑定时,gevent就是纯粹的魔术。

有一个简单的规则:每当I/O操作阻塞或显式执行切换时(例如使用gevent.sleep()),greenlet就会被切换掉

内置的python线程的行为实际上与gevent的greenlet相同(伪)“并发”。

关键的区别在于,greenlet使用协作多任务,其中线程使用抢占式多任务。这意味着一个greenlet永远不会停止执行并“屈服”到另一个greenlet,除非它使用某些“屈服”函数(比如gevent.socket.socket.recv或gevent.sleep)。

另一方面,线程将根据操作系统何时决定将它们交换出去而屈服于其他线程(有时是不可预测的)。

最后,要在Python中利用多核,如果这是您想要的,我们必须依赖于多处理模块(Python中的一个内置模块)。这个“绕吉尔走”。其他替代方法包括使用Jython或使用任务队列(例如Zeromq)并行执行任务(在不同的cpu上)。

我在这里写了一个很长的解释-http://learn-gevent-socketio.readthedocs.org/en/latest/。如果你想深入了解细节的话。:-D个

相关问题 更多 >