2

gevent coro-thread が実際のスレッドで動作するかどうか疑問に思っていますか? おそらく、複数のスレッドでプログラムを作成し、各スレッドにいくつかのコルーチンを含めることができますか?

編集済み

両方gevent.Threadingと CPython スレッドには欠点があります。コルーチンは複数の CPU を利用できませんが、スレッド数が多い場合、CPython Threading のパフォーマンスは GIL によって制限されます。coro とスレッドを同時に使用する機能を追加するために、bluelet に似た純粋な Python コルーチンの実装にも取り組んでいます (ただし、オーバーヘッドは gevent よりも大きい場合があります)。

gevent または greenlet ( https://pypi.python.org/pypi/greenlet ) が CPython スレッドで coop 機能を実現できるかどうか疑問に思っています。

4

1 に答える 1

3

Gevent 1.0 は、スレッドごとに Gevent メイン ループを持つことをサポートする必要があります。

また、gevent.threadpoolgevent 互換の方法で実際のスレッドでタスクを実行できます。

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 に答える