2

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

已编辑

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

我只是想知道 gevent 或 greenlet(https://pypi.python.org/pypi/greenlet)是否可以通过 CPython 线程实现合作能力。

4

1 回答 1

3

如果这就是你的意思,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

您可以gevent.threadpool通过查看https://github.com/gevent/gevent/blob/master/gevent/threadpool.py(或 1.0 的文档以已发布/HTML 形式提供后的文档)找到更多信息。

于 2013-09-29T15:06:26.007 回答