私はちょうどこの新しい実装について探していました。私はPython 2.7を使用しています。thisをインストールする必要があります。使用すると、CPythonのGILという単語は忘れられますか?同時治療薬はGILの薬ですか?
答えて
いいえ、concurrent.futures
は、GILとはまったく関係ありません。
スレッドの代わりにプロセスを使用すると、GILの薬です。 (もちろん、すべての薬のように、それは副作用を持っている。しかし、それは動作します。)
futures
モジュールは、ちょうどあなたのスケジュールと直接threading
またはmultiprocessing
を使用するよりも作業に待つ簡単な方法を提供します。 future
コードを変更せずに、スレッドプールとプロセスプール(そしておそらくグリーンレットループ、あるいはあなたが発明してビルドしたもの)を入れ替えることができるという利点があります。したがって、コードにGILの問題があるかどうかわからない場合は、スレッドを使用するようにコードを構築してから、1行の変更でプロセスを使用するように切り替えることができます。
ThreadPoolExecutor
を使用する場合は、手動で
threading
と
queue
でスレッドプール、タスクキューなどを作成したかのように、それはまったく同じGILの問題を持っています。
ProcessPoolExecutor
を使用する場合は、
multiprocessing
を手動で使用した場合と同じ方法で(同じトレードオフで)GILの問題を回避します。
PyPIパッケージは、concurrent.futures
モジュールの3.2から2.x(および3.0-3.1)の単純なバックポートにすぎません。 (それは魔法のようにあなたに新しい-およびソート・オブ・改善3.2 GILを与える、またはそれ以上-改善3.3 GIL、はるかに少ないGILは削除されません。)
私はおそらく持つべきではありませんGILが変わったと言いました。これはちょうど混乱を招いてしまったようですが...今は、ひどく単純化することによって、まっすぐにしてみましょう。
IOバインドされた作業以外何もしていない場合、スレッドは並行性を得るのに最適な方法です。そして3.3はそれらをより良く動作させますが、ほとんどの場合、2.7は既に十分です。ほとんどの場合、そうでない場合は3.3で十分ではありません。 10000の同時クライアントを処理する場合は、スレッドの代わりにイベントループ(たとえば、twisted
、tornado
、gevent
、tulip
など)を使用する必要があります。
CPUバインドされた作業がある場合、スレッドはその作業をまったく並列化するのに役立ちません。実際、彼らは事態を悪化させます。 3.3はそのペナルティをそれほど悪くしないが、それはまだペナルティであり、あなたはまだこれを行うべきではない。 CPU作業を並列化する場合は、スレッドではなくプロセスを使用する必要があります。 3.3の唯一の利点は、futures
がmultiprocessing
より少し使いやすく、それをインストールする必要がなく内蔵されていることです。
2.7よりも優れた言語を実装しているため、3.3への移行をお勧めしません。しかし、より良い並行性は動かす理由ではありません。
彼らは違うものです!それはGILが3.2に書かれていたので、私はそれが同時であるようです。問題を解決する未来、ありがとうございます。 –
@AbdelouahabPp:いいえ、 'concurrent.futures'は問題を解決しません。並行コードはやや簡単に書くことができます。 3.2と3.3のGILへの変更は完全に独立しており、10年以上にわたる最初の重要なGILの変更が 'futures'ライブラリと同じバージョンのPythonに到着したのは偶然のことです。 – abarnert
したがって、優れた同時コードを取得したい場合は、3.3に切り替える必要があります。ありがとうございました:)そしてこのスレッドは私がそれ以上のアイデアを得るためにサーバーの時間に戻ってきますので、ごめんなさい。初心者であり、このライブラリを竜巻で見つけました。 –
- 1. クローズジェネリック医薬品は
- 2. ジェネリック医薬品
- 3. ILのジェネリック医薬品は?
- 4. 雲での治療
- 5. 治療:ノンブロッキング・ポーズ
- 6. 治療法convert_image
- 7. ジェネリック医薬品のC#.NET
- 8. 治験薬を使用して手動検査用のデータをロード
- 9. ジェネリック医薬品とClassCastExceptionが
- 10. 治療SgmlLinkExtractorの質問
- 11. 試薬フォームは再フレームで使用する予定ですか?
- 12. Groovyのジェネリック医薬品の問題
- 13. ジェネリック医薬品の名前の衝突
- 14. 治療単位検査
- 15. 薬剤をNCronジョブに渡す
- 16. ジェネリック医薬品の良いデザイン
- 17. JAXB:ジェネリック医薬品との多型
- 18. ジェネリック医薬品は使用できますか?
- 19. OSX Lionでの治療のインストール
- 20. 治療はコンパイルされません
- 21. 治療 - 最後の結果のみ
- 22. Microsoft Azureに治療を展開する
- 23. 治療中のストリップ\ n \ t \ r
- 24. セレンと動的ページの治療
- 25. 慣用の治療法Option [Boolean]
- 26. は、どのように私は、「NAV-薬」と「NAV-スタック」
- 27. は汎用Javaのクラスを取得し、ジェネリック医薬品
- 28. 指定ジェネリック医薬品は、フィールドを使用してタイプ
- 29. ジェネリック医薬品は、私が法持つ基底クラス
- 30. OS X 10.6での治療のインストールに関する問題
http://www.dalkescientific.com/writings/diary/archive/2012/01/19/concurrent.futures.html –
http://docs.python.org/dev/library/concurrent.futures.html #module-concurrent.futures - GILについて何も言及していないので、使用するスレッドは明らかに真のスレッドです。さもなければ、なぜこのすべてのhulabalooを気にしますか? –
私は、非同期コードがconcurrent.futuresの使用が大好きであることを発見したので、GILのメディシンだと言いました。 –