問題タブ [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.

0 投票する
1 に答える
302 参照

python - リクエストで gevent/greenlets を使用すると ServerNotFoundError が発生する

リモート API からのデータの取得を並列化しようとしています。リモート API には一括機能がないため、必要なオブジェクトごとに個別の GET 要求を作成する必要があります。

ミックスに gevent を追加しました。うまくいくこともありますが、同じリクエスト セットをもう一度試すと、100 件中 50 件が失敗します。

これを解決する方法について何か考えはありますか? これは、要求が多すぎて速すぎた結果ですか? もしそうなら、グリーンレットの数を抑える簡単な方法はありますか?

0 投票する
2 に答える
280 参照

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()をハックしてすぐに返すと(そして渡された遅延に何も登録しないように)、エラーはなくなります。:-/

0 投票する
1 に答える
1016 参照

python - Python での同期 - Gevent マルチスレッド環境

Java 開発者であり、Python 言語の学習を開始しました。最近、非同期グリーンレットを使用する Python Gevent ライブラリに出会いました。Geventを使用してPythonで同期、デッドロック、ライブロックがどのように機能するか/回避されるかを誰かが説明してくれませんか。

  • Java Threading には、上記の問題を防ぐ同期ブロックがあります。
0 投票する
1 に答える
1641 参照

python - Python クライアント呼び出しの双方向 ZeroRPC が AssertionError を引き起こす

私のセットアップでは、Python オブジェクトを使用してセッションの双方向 ZeroRPC ペアを作成する Node.js 子が生成されています。

Python 側は次のようになります。

Node.js 子クライアントは Python サーバーでメソッドを呼び出すことができますが、そのサーバー内のクライアントは、例外を取得せずに Node.js 子サーバーで呼び出すことはできません。

Python クラスのクライアントを gevent として生成し、必要に応じてそのreceiveMessageメソッドを呼び出す必要がありますか? または、私が見落としている他のトリックはありますか?

0 投票する
1 に答える
564 参照

python - greenletブロックを「殺す」かどうかの違いは何ですか

kill() を使用してグリーンレットを強制終了しようとすると、「ブロック」パラメーターがデフォルトで True になります。

ドキュメントは次のように述べています。

block がTrue (デフォルト) の場合、greenlet が終了するか、オプションのタイムアウトが期限切れになるまで待ちます。block がFalseの場合、現在の greenlet は予定外ではありません。

これを正しく理解する方法は?どうも