13

具体的には、Eventlet の GreenPool クラスです。マルチパートアップロードの個々の部分として大きなファイルを S3 にアップロードするコードをいくつかテストしました。これまでに気づいたことは、eventlet を使用すると CPU 使用率が大幅に低下することです。スレッドを使用するだけでなく、Eventlet の他の長所と短所を探しています。ありがとう。

4

1 に答える 1

12

基本的に、Eventlet のグリーン スレッドは、すべての実用的な目的において、OS スレッドの軽量な類似物と見なされます。長所:

  • CPU、メモリ、およびシステムコールの観点から作成する方が安価 (0)
  • 切り替えが安くなります。これは、各スレッドが積極的に GIL を取得しようとする Python 2.x で特に当てはまり、CPU を浪費します。

短所:

  • 多くのグリーン スレッドが 1 つの OS スレッド内で動作するため、そのうちの 1 つのシステムコール (open(2) など) が OS スレッドをブロックすると、すべてのグリーン スレッドもブロックされるため、これは重要です。
  • SMP なし (マルチ CPU/マルチコア); しかし、GIL では、これは Python の OS スレッドにも当てはまります。greenlet[1] を使用すると、この制限はより厳しくなります。これは、一部の C 拡張機能が GIL を解放して、他のグリーン スレッドを続行できるようにすることができないためです。

この回答も役に立つかもしれません: Is a greenthread equal to "real" thread

[1] Eventlet で使用される「スレッド化」ライブラリhttps://github.com/python-greenlet/greenlet

于 2013-05-01T07:10:10.770 に答える