Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gevent可以与CPython中的真实线程结合使用吗?_Python_Multithreading_Gevent_Coroutine - Fatal编程技术网

Gevent可以与CPython中的真实线程结合使用吗?

Gevent可以与CPython中的真实线程结合使用吗?,python,multithreading,gevent,coroutine,Python,Multithreading,Gevent,Coroutine,只是想知道gevent coro线程是否可以与真正的线程一起工作?也许我可以编写一个有多个线程的程序,每个线程都有一些协程 已编辑 gevent.Threading和CPython线程都有缺点。协同程序不能使用多个CPU,而当线程数量较大时,CPython线程性能受到GIL的限制。 我还在研究一个类似于bluelet的纯Python协同程序实现(尽管开销可能比gevent大),以增加同时使用coro和线程的能力 我只是想知道gevent或greenlet()是否可以通过CPython线程实现co

只是想知道gevent coro线程是否可以与真正的线程一起工作?也许我可以编写一个有多个线程的程序,每个线程都有一些协程

已编辑

gevent.Threading
和CPython线程都有缺点。协同程序不能使用多个CPU,而当线程数量较大时,CPython线程性能受到GIL的限制。 我还在研究一个类似于bluelet的纯Python协同程序实现(尽管开销可能比gevent大),以增加同时使用coro和线程的能力


我只是想知道gevent或greenlet()是否可以通过CPython线程实现coop功能。

gevent 1.0应该支持每个线程都有一个gevent主循环,如果这是您的意思的话

另外,
gevent.threadpool
允许以与gevent兼容的方式在真实线程中运行任务:

threadpool = gevent.threadpool.ThreadPool()
result = threadpool.spawn(some_non_gevent_friendly_thing_such_as_file_io)

result.get()  # or use ThreadPool.apply/apply_e to get the result value immediately

您可以通过查看(或者在1.0的文档以发布的/HTML格式提供后,您可以查看文档)找到有关
gevent.threadpool
的更多信息。

我认为您可以将
gevent.Threading
thread.Threading
一样对待。这些api具有相似性。gevent的coro线程更有效。我理解你的意思,并在你的编辑中更新了我的问题:GIL始终限制并行性(即2个线程),而不仅仅是在线程数量较大时。