問題タブ [asyncore]
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 - asynchatからサブクラスのINDIVIDUALインスタンスを開始する
したがって、私が持っている状況は、サブクラスを作成した複数のクラスをロードしたがasynchat
、そのうちの1つだけを実行したいということです。もちろん、私が電話をかけるasyncore.loop()
と、すべてが始まるので、これはうまくいきません。そのうちの1つだけを実行し始める方法はありますか?
編集:map
渡すことができるパラメータと関係があると思いますが、asyncore.loop
動作させることができません。
edit2:わかりました。基本的に私は次のことをしました:
python - asyncoreがhandle_readを実行していません
1つのソケットが送信者で、もう1つが受信者である単純な非同期の例を作成しようとしています。何らかの理由で、レシーバーのhandle_read()が呼び出されることはないため、「テスト」データを取得することはありません。誰もが理由を知っていますか?これは非同期での私の最初のショットなので、おそらく非常に単純なものです。
python - Python、Asyncore、フォーク
手始めに、ForkMixInとThreadMixInの両方でTwistedとSocketServerを使用し、「スレッドプール」受信を試しました。
しかし、私はPythonで何か特別な機能を作りたかったのです。
少し背景。以前、私はCで、ソケットにバインドしてそれをリッスンする単純なTCPデーモンを作成し、Xを何度もプリフォークしてから、サーバーソケットの説明をすべてのフォークに渡すだけで、誰もが非常に結婚してクライアントを受け入れました。
私はたくさん好きな「select/poll」ベースの非同期をチェックしました。私の唯一の強みは、マルチCPUマシンを利用するために数回フォークして、スケジューリングで最高のものを期待することで、CPUを少し解放できることでした。
私はそれを私の人生のために働かせることができません。接続を受け入れることができるのは1つのインスタンスのみであり、他のすべてのインスタンスは接続の処理時に例外をスローするだけで、「空を介して反復することはできません」。
これも実現可能ですか?たくさんチェックしましたが、非同期ディスパッチャーをフォークするためのコードが見つかりませんでした(叫び)
ありがとうございました!
更新1:(要求に応じて完全なトレースバック)
asyncore.loopなどの前にフォークしたかどうかに関係なく、常にacceptで発生します。
アップデート2:(フルソース) pastebinedソース
python - asyncore を使用したソケット バッファの読み取り
私は Python を初めて使います (ただし、Java でプログラミングを行ってから数年が経ちます)。単純なソケットベースのネットワーク アプリケーションに取り組んでいます (ただの楽しみです)。アイデアは、私のコードがリモート TCP エンドポイントに接続し、サーバーからクライアントにプッシュされるデータをリッスンし、これに対して何らかの解析を実行することです。
サーバー -> クライアントからプッシュされるデータは UTF-8 でエンコードされたテキストであり、各行はCRLF
( \x0D\x0A
) で区切られています。ご想像のとおり、クライアントがサーバーに接続し (ユーザーがキャンセルするまで)、受信した行を読み取って解析するという考え方です。
私はこれを機能させることができましたが、これが正しい方法であるかどうかはわかりません。したがって、私の実際の質問(従うべきコード):
- これは Python で正しい方法ですか (つまり、本当にこれほど簡単ですか)?
- buffers/ に関するヒント/トリック/有用なリソース (参照ドキュメントを除く
asyncore
)
現在、データは次のように読み取られ、バッファリングされています。
このByteUtils.ends_with_crlf
関数は、バッファの最後の 2 バイトをチェックするだけです\x0D\x0A
。最初の質問が主な質問です (回答はこれに基づいています) が、他のアイデアやヒントは大歓迎です。ありがとう。
python - Asyncore が Tkinter GUI で正しく動作しない
現時点では、GUI とネットワーク プログラミングに関してはまだ初心者なので、これが非常に簡単な修正になることを願っています。tkinter モジュールと asyncore モジュールについて、それぞれにいくつかのプログラムを構築することについて非常に基本的な理解がありますが、プログラムで両方を一緒に使用するのに問題があります。UI 全体をまとめてみたところ、重要な非同期ネットワーク機能を実現できなかったことがわかりました。簡単にするために、私が抱えている基本的な問題を説明するために、プログラムを最も単純な形式に分解しました。コードは次のとおりです。
そのため、プログラムを実行してボタンをクリックすると、文字列「init works」が表示され、clientSocket オブジェクトが初期化され、接続が正常に確立されたことを示します。ただし、handle_connect メソッドは実行されません。また、handle_read メソッドを実装してサーバーでコマンドを実行すると (データをクライアントに送り返すため)、このメソッドも呼び出されません。非同期コア ループの単独での実行を妨げている一般的な問題があると考えています。tkinter イベント ループが原因である可能性があることは認識していますが、after_idle メソッドを使用すると、GUI がアイドル状態のときに Tkinter 以外のイベントを処理できるようになるという印象を受けました。まだ問題を引き起こしているのはtkinterイベントループですか、それとも何か他のものでしょうか?
python - Python 非同期コアとプレーンな古い C
私は2つの異なるプロジェクトのストレステストを行っています.1つはproxsmtpd - Cで書かれたsmtpプロキシで、もう1つはasyncoreとsmtpd pythonモジュールを使用して1時間以内に開発したsmtp_proxy.pyです。
負荷が高い状態で両方のプロジェクトを強調したところ、proxsmtpd は 1 秒あたり 400 の smtp セッションを保持できるのに対し、私の python プログラムは 1 秒あたり 160 の smtp セッションしか実行できないことがわかりました。
それで、私の質問は、非同期コアにいくつかのパフォーマンス制限があるためですか、それとも C プログラムの方が速いだけですか? それとも、非効率的な方法で非同期コアを使用している私ですか?
python - QObject (QPlainTextEdit) & マルチスレッドの問題
現在、Python asyncore と pyqt4 を使用してネットワークを学習しようとしています。
私は小さなサーバーをコーディングしました。このサーバーは基本的にポートをリッスンし、受信したすべてのメッセージを送信者に再送信します。
qtsQApplication.exec_()
とasyncore.loop()
は両方とも返されない関数であるため、1 つのスレッドで両方を開始できなかったので、別asyncore.loop()
のデーモン スレッドを見つめました。
サーバー クラス ( から派生asyncore.dispatcher
) が接続を確立または切断するか、メッセージを送受信するときはいつでも、ウィンドウ クラス ( から派生QtGui.QMainWindow
) のメソッドを呼び出し、情報をQPlainTextEdit
.
ただし、マウスでテキストをマークしない限り、テキストは表示されません。
Python コンソールに次のエラー メッセージが表示されます。
これは別のスレッドからqt関数を呼び出すことによって引き起こされる可能性があり、プレーンな関数呼び出しの代わりにシグナルとスロットを使用すると問題が解決する可能性があることをいくつかのフォーラムで読みましたが、シグナルも試しましたが、まだこのエラーが発生します。
それで、(それが本当に私の問題の原因である場合)別のスレッドからqtオブジェクトのメソッドを呼び出す正しい方法は何ですか?
詳細情報を編集: asyncore.loop() 呼び出しは子スレッドにあり、実際にはブロックされていませんが、asyncore.loop() の実行時のみ、サーバー クラス (asyncore.dispatcher) がネットワークを実行できます。したがって、asyncore.loop() の実行時に、サーバー クラスのメソッドが asyncore.loop() (= 子スレッド) によって呼び出され、これらの中で、メイン スレッドで実行されているウィンドウ クラスにシグナルを送信しようとしました。
EDIT:私は今それが働いているようです、私は私のコードにいくつかのエラーがありました.
編集:小さな例: http://paste2.org/p/635612 (リンク切れ)
python - Python非同期コアとdbus
asyncore
同じをdbus
介して統合することは可能main loop
ですか?
通常、DBus の統合はglib
メイン ループを介して行われます。asyncore
このメイン ループを統合するか、dbus を使用することは可能asyncore
ですか?
python - PythonAsyncoreを使用したSNMP要求/応答サービスの構築
asyncoreの上に構築されたサードパーティのプロトコルモジュール(SNMP)があります。asyncoreインターフェースは、応答メッセージを処理するために使用されます。asyncoreメインループの実行中にプロトコルの要求側を生成するクライアントを設計するための適切な手法は何ですか。私は今2つのオプションを考えることができます:
asyncore.loop()のloop、timeoutパラメーターを使用して、クライアントプログラムが適切な要求を送信できるようにします。
レシーバーと同じ非同期処理ループで実行されるクライアント非同期ディスパッチャーを作成します。
最良の選択肢は何ですか?私は2番目のソリューションに取り組んでいます。これは、プロトコルAPIが非同期パラメーターへの直接アクセスを提供しないためです。非同期を利用するための適切なテクニックを誤解した場合は、訂正してください。
python - pythonasyncoreを使用してソケットから固定量のバイトを読み取る
asyncoreを使用して、「length:message」タイプのプロトコルを使用してリモートサーバーと通信します。誰かがソケットから正確なバイト数を読み取る方法を私に勧めてもらえますか?handle_readを使用して内部バッファーを埋め、毎回関数を呼び出してバッファーのサイズをチェックしようとしましたが、見た目が醜いです(バッファーが長さを読み取るのに十分な長さであるかどうかを確認し、バッファーの長さがメッセージの長さよりも大きいかどうかを確認し、読み取りますメッセージなど...)。バッファが十分にいっぱいになり、値を返すまでスリープする「socket.read(bytes)」のようなものを持つことは可能ですか?