問題タブ [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 - リクエストで gevent/greenlets を使用すると ServerNotFoundError が発生する
リモート API からのデータの取得を並列化しようとしています。リモート API には一括機能がないため、必要なオブジェクトごとに個別の GET 要求を作成する必要があります。
ミックスに gevent を追加しました。うまくいくこともありますが、同じリクエスト セットをもう一度試すと、100 件中 50 件が失敗します。
これを解決する方法について何か考えはありますか? これは、要求が多すぎて速すぎた結果ですか? もしそうなら、グリーンレットの数を抑える簡単な方法はありますか?
python - twisted と greenlets を使用するときのエラー
私はグリーンレットでツイストを使用しようとしているので、inlineCallbacks を使用せずにツイストで同期のように見えるコードを記述できます。
これが私のコードです:
5 つの主要部分があります。
- タイマーを開始し、親 greenlet に戻るスリープ関数。タイマーが切れると、スリープ中の greenlet に戻ります。
- make_async デコレーター。これは、いくつかの同期コードを取得し、greenlet で実行します。IT は deferred も返すため、コードの完了時に呼び出し元がコールバックを登録できます。
- 待機中の遅延が解決されるまで greenlet をブロックする wait_one 関数。
- (ラップされたときに) deferred を返す内部関数は、ランダムな時間スリープし、スリープした時間を deferred に渡します。
- inner() を呼び出す外部関数は、それが戻るのを待ってから、戻り値を出力します。
このコードを実行すると、次の出力が得られます (最後の 2 行のエラーに注意してください)。
少し調べてみると、次のことがわかりました。
- 最後の行は greenlet.c によって記録されます
- 前の行は、 delメソッドで発生した例外を無視しているため、python 自体によってログに記録されます。
GreenletExit
またはtwisted.python.failure.Failure
例外にアクセスしてスタックトレースを取得できないため、これをデバッグするのに本当に問題があります。
私が間違っていること、またはスローされている例外をデバッグする方法を知っている人はいますか?
もう1つのデータポイント:wait_one()をハックしてすぐに返すと(そして渡された遅延に何も登録しないように)、エラーはなくなります。:-/
python - Python での同期 - Gevent マルチスレッド環境
Java 開発者であり、Python 言語の学習を開始しました。最近、非同期グリーンレットを使用する Python Gevent ライブラリに出会いました。Geventを使用してPythonで同期、デッドロック、ライブロックがどのように機能するか/回避されるかを誰かが説明してくれませんか。
- Java Threading には、上記の問題を防ぐ同期ブロックがあります。
python - Python クライアント呼び出しの双方向 ZeroRPC が AssertionError を引き起こす
私のセットアップでは、Python オブジェクトを使用してセッションの双方向 ZeroRPC ペアを作成する Node.js 子が生成されています。
Python 側は次のようになります。
Node.js 子クライアントは Python サーバーでメソッドを呼び出すことができますが、そのサーバー内のクライアントは、例外を取得せずに Node.js 子サーバーで呼び出すことはできません。
Python クラスのクライアントを gevent として生成し、必要に応じてそのreceiveMessage
メソッドを呼び出す必要がありますか? または、私が見落としている他のトリックはありますか?
python - greenletブロックを「殺す」かどうかの違いは何ですか
kill() を使用してグリーンレットを強制終了しようとすると、「ブロック」パラメーターがデフォルトで True になります。
ドキュメントは次のように述べています。
block がTrue (デフォルト) の場合、greenlet が終了するか、オプションのタイムアウトが期限切れになるまで待ちます。block がFalseの場合、現在の greenlet は予定外ではありません。
これを正しく理解する方法は?どうも