問題タブ [twisted.internet]

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 投票する
2 に答える
705 参照

python - Python Twisted-run() メソッドが認識されない

以下は、サーバーのコードです。

次のエラーが表示されます。

Windows 7でEclipseでpydevを使用しています。どこが間違っていますか?

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

python-2.7 - TWISTED python - deferToThread が完了するのを待つ

私は Twisted フレームワークが初めてで、遅延スレッドが完了するまでプログラムを待機させたいと考えています。

このようにループするのではなく、きちんとした方法で deferred が完了するのを待つことは可能ですか?

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

python-2.7 - deferToThread と Deferred()

以下の 2 つのコード スニペットで何が起こるかを理解したいと思います -

スニペット#1

私の理解では、すべてのスレッドが並列に実行され、出力は => すべての proc が混在した stdout です。

スニッパー#2

そして、このスニペットでは、各遅延コールバックが次々にトリガーされ、出力に関する限り、proc1 stdouts だけが無期限に注ぎ込まれます。

私が間違っている場合は修正してください。したがって、基本的に私が理解し確認したいのは、遅延オブジェクトが次々にトリガーされるのに対し、deferToThread は名前スレッドのように並列に実行されることです。

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

python - twisted: トランスポートに書き込む前に接続が存在するかどうかをテストします

を実行する前に接続がまだ存在するかどうかをテストする可能性はありtransport.write()ますか?

Protocol.transportメッセージが5 秒ごとに送信される (に書き込まれる) ように、simpleserv/simpleclient の例を変更しました。接続は永続的です。

私のwifiを切断しても、まだトランスポートに書き込みます(もちろん、メッセージは反対側に届きません)が、エラーはスローされません。Wi-Fi を再度有効にすると、メッセージは配信されますが、次のメッセージ送信の試行は失敗します (そしてProtocol.connectionLost呼び出されます)。

ここでも時系列で何が起こるか:

  1. メッセージを送信すると接続が確立され、メッセージが配信されます。
  2. Wi-Fi を無効にする
  3. メッセージを送信すると に書き込みますがtransport、エラーはスローされず、メッセージは届きません
  4. Wi-Fi を有効にする
  5. 3.で送信したメッセージが届く
  6. メッセージを送信するProtocol.connectionLostと電話がかかる

手順 6 を実行する前に、トランスポートに書き込むことができるかどうかを知っておくとよいでしょう。何か方法はありますか?

サーバー:

クライアント:

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

python-2.7 - スレッドの複数の呼び出し.deferToThread

時間を節約するために2つの異なるメソッドを同時に呼び出す必要があり、それらのメソッドから取得した結果を使用して別のメソッドを呼び出す必要があるため、twisted.internet.threads の deferToThread メソッドに出くわしました。これは遅延オブジェクトを返し、コールバックをアタッチできるようにしますメソッド。

これが私のコードです

与えられたコードでは、結果は辞書です。myMethod1 と myMethod2 は、非同期で実行する必要がある 2 つのメソッドです。

私の理解によると、deferToThread は、辞書内の各項目に対して特定のメソッドを実行するための個別のスレッドを作成します。そのため、ループが繰り返されるたびに、2 つの異なるスレッドが作成されます。それはいいです。しかし、修正間隔の後にこのコードを継続的に実行する必要があります。修正間隔の後に実行しようとしましたが、16〜17回実行した後、すべてが機能しなくなりました。多くのスレッドがバックグラウンドで実行されているということですか?? 多くのスレッドが実行されている場合、それらのスレッドを停止または強制終了する方法は?

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

python - Deferred.callback() または Deferred.errback() は呼び出し元に例外を発生させることができますか?

.callback()orを呼び出す.errback()と、呼び出し元に例外が発生し、遅延オブジェクトによってキャプチャされないという状況が発生する可能性はありますか?

次の遅延およびコールバックがあるとします。

を呼び出すとd.callback(None)、の結果はfromにdなります。を呼び出すと、 の結果はから発生したものになります。ただし、いずれの場合も、例外は呼び出し元に発生しません。Exceptionbad_callback()d.errback(Exception())dExceptionbad_errback()

.callback()現在、 orを呼び出すと呼び出し元に例外が発生するいくつかの条件を知ってい.errback()ますが、それらは deferred の適切な使用に違反する条件です。

  • 明らかに、不適切な数の引数で.callback()またはを呼び出すと、 ..errback()TypeError

  • すでに呼び出されている deferred を呼び出すと、 が発生しAlreadyCalledErrorます。

  • を呼び出す.callback(defer.Deferred())と、 が発生しAssertionErrorます。

  • 呼び出しは、アクティブな例外がない場合に発生する.errback()呼び出しと同等です。.errback(failure.Failure())NoCurrentExceptionError

本当に私の質問は次のとおりです。遅延オブジェクトがまだ呼び出されておらず、結果が適切である限り、.callback(result)orを呼び出しても例外が発生しないという動作に安全に依存できますか?.errback(exception_or_failure)

0 投票する
0 に答える
683 参照

python - Autobahn python twisted wamp クライアントの例で _parseClientTCP() の TypeError が返される

https://github.com/tavendo/AutobahnPython/tree/master/examples/twisted/wamp/basicにリストされている Autobahn Python ツイスト サンプルを実行したかったのです。ただし、client.py を実行すると、常に TypeError が返されます。

環境の詳細: Ubuntu 12.04.2 LTS 64 ビット、Python 2.7.3、アウトバーン 0.8.6

インストール手順:

助けてください!サンプルを実行するにはどうすればよいですか? server.py は問題なく動作します。

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

python-2.7 - ReactorNotRestartable エラー

ネットワークに接続されたデバイスのupnp検出を実装するツールがあります。

そのために、スクリプトを作成し、その中でデータグラム クラスを使用しました。

実装: ツールでスキャン ボタンが押されるたびに、その upnp スクリプトが実行され、ツールで作成されたボックスにデバイスが一覧表示されます。

これはうまくいきました。

しかし、スキャンボタンをもう一度押すと、次のエラーが表示されます。

upnp スクリプトの主な機能:

デバイスを検出するために M-search コマンド (upnp) を送信するサーバー クラスがあります。

サーバー クラス コンストラクターで、m-search を送信した後、リアクターを前かがみにしています

グーグルから、リアクターを再起動できないことがわかりました。これは、その制限であるためです。

デバイスを複数回スキャンでき、この「reactor not restartable error」が発生しないように、コードを変更する方法を教えてください。