問題タブ [greenlets]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - pycharm + gevent greenlet.join() を使用してもブロックされなくなりました
そのため、pycharm の実行中に gevent を 1.1rc4 (1.0.2 から) にアップグレードした後、greenlets を適切に参加させることができません...次のコードを例にとります。
出力します:
IDE から、CLI から同じインタープリターを使用して正常に実行されます。
私は cli と gui のコードをたどりましgreenlet.join()
たhub.switch()
。
その最後の行は、greenlet が実行される前にすぐに戻ります... pycharm デバッガーはそのコードにステップインさせません...
どんな助けでも素晴らしいでしょう...コルーチンのフロー制御は、うまくいくと十分に難しいです...
python - HTTPS 経由の gevent/grequests での奇妙なブロック動作
次のコードは、200 ミリ秒ごとに要求を送信し、応答が来るたびに非同期で処理する必要があります。
HTTP 経由では期待どおりに動作します。リクエストは 200 ミリ秒ごとに送信され、レスポンスが到着するたびにレスポンス コールバックが個別に呼び出されます。ただし、HTTPS では、応答が到着するたびに要求が大幅に遅延します (応答ハンドラーが機能しない場合でも)。応答コールバックは、要求ごとに 2 回呼び出され、1 回は長さゼロの応答で呼び出されるようです (編集: これはリダイレクトのためであり、ブロッキングの問題とは無関係のようです、Padraic に感謝します)。
HTTPS を介したこのブロック動作の原因は何ですか? (www.bbc.co.uk
地理的に私から離れた例にすぎませんが、テストしたすべてのサーバーで発生します)。
grequests_test.py
$ ipython2 grequests_test.py 'http://www.bbc.co.uk'
(期待される結果)
ipython2 grequests_test.py 'https://www.bbc.co.uk'
(リクエストは遅れて送信されます)
最初の応答は、次の要求が送信されるはずだったのに送信されてからかなり後に到着したように見えることに注意してください。最初の応答が到着する前に、スリープが返されず、次の要求が送信されなかったのはなぜですか?
python - python gevent.joinall がすべての greenlet を実行する理由
次の Python コードがあります。
上記のように、threads[0].value
から適切な値を取得しましたfooFn
。これはthreads[0]
greenlet が実行されたことを意味します。
threads[1]
greenletだけを に渡したときに、なぜこれが起こったのgevent.joinall
ですか?
実際に渡されたグリーンレットのみが実行されるようにするにはどうすればよいgevent.joinall
ですか?
python - Python ライブラリのコルーチンは常にシングルスレッドですか?
gevent
ドキュメントから:
greenlet はすべて同じ OS スレッドで実行され、協調的にスケジュールされます。
asyncio
ドキュメントから:
このモジュールは、コルーチンを使用してシングルスレッドの同時実行コードを記述するためのインフラストラクチャを提供します。
asyncio
提供します
試してみてください。マルチスレッドまたはマルチプロセスのコルーチンを実装する主要な Python ライブラリに出くわしたことはありません。つまり、コルーチンを複数のスレッドに分散させて、作成できる I/O 接続の数を増やします。
コルーチンは基本的に、メイン スレッドがこの 1 つの I/O バウンド タスクの実行を一時停止し、次の I/O バウンド タスクに進むことを可能にし、これらの I/O 操作の 1 つが終了して処理が必要な場合にのみ割り込みを強制することを理解しています。その場合、I/O タスクを複数のスレッド (それぞれが異なるコアで動作している可能性がある) に分散すると、実行できる要求の数が明らかに増えるはずです。
コルーチンがどのように機能するか、または機能するように意図されているかを誤解している可能性があるため、私の質問は2つの部分に分かれています。
複数のスレッド(おそらく異なるコア上) または複数のプロセスで動作するコルーチン ライブラリを持つことさえ可能ですか?
もしそうなら、そのような図書館はありますか?
python - ID で Python Greenlet を kill する
Greenlet.spawn
ドキュメントで定義されているように、Greenlet の新しいインスタンスを作成します。以下のコードでは、ID で Greenlet を強制終了できるようにしたいと考えています。
私はあなたの助けに感謝します。