問題タブ [python-multithreading]

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 に答える
1239 参照

python - thread.start() の後に実行するとサブプロセスが機能しなくなる

サブプロセスの呼び出しがほぼすぐに返されるはずですが、最終的にブロックされるという問題が発生しています (実際の子プロセスは機能せず、クリーンアップされていません)。これは、スレッドも使用している場合にのみ発生するようです。以下のプログラムは、私が見ているものをうまく再現しています。それを実行すると、ホスト名がブロックされるまで、範囲を循環する番号とともに何度も出力されることがわかります。スレッドが終了すると、機能していないプロセスがクリーンアップされ、再び発生すると思われます。

何が起こっているのか、そしてこれを起こさずにスレッドとサブプロセスの両方を使用するにはどうすればよいかについて、誰かが洞察を持っていますか? Ubuntu 11.4 で Python 2.7.1+ を使用しています。

これを実行すると、サブプロセスが無効になり、メイン スレッドがブロックされます。

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

python - スレッド化と情報の受け渡し-方法

混乱からリフレームするために、私は質問を編集しました:

one.py

しかし、ここでの私の混乱は、スレッド間のキューから値を入れたり取得したりできることですが、カウントの場合は反映されません。

何故ですか?
ここで実際に欠けているポイントは何ですか?

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

python - ^C/KeyboardInterrupt を使用して子スレッドで Python raw_input() を中断する

マルチスレッドの Python プログラムでは、1 つのスレッドが組み込みのraw_input()を使用してコンソール入力を要求することがあります。raw_input プロンプトが表示されているときに、シェルで ^C と入力して (つまり、SIGINT シグナルを使用して) プログラムを終了できるようにしたいと考えています。ただし、子スレッドが raw_input を実行している場合、^C と入力しても何も起こりません。Return を押す (raw_input を離れる) まで、KeyboardInterrupt は発生しません。

たとえば、次のプログラムでは:

^C と入力しても、入力が終了するまで何も起こりません。ただし、呼び出すだけの場合T().run()(つまり、シングルスレッドの場合: メインスレッドで raw_input を実行するだけ)、^C はすぐにプログラムを閉じます。

おそらく、これは SIGINT がメイン スレッドに送信され、コンソール上でフォークされたスレッド ブロックが読み取られている間、メイン スレッドが中断されている (GIL を待機している) ためです。メイン スレッドは、raw_input が返された後に GIL を取得するまで、シグナル ハンドラを実行できません。(これについて間違っている場合は訂正してください。私は Python のスレッド実装の専門家ではありません。)

SIGINT をメインスレッドで処理できるようにしながら、raw_input のような方法で stdin から読み取り、プロセス全体をダウンさせる方法はありますか?

[Mac OS X といくつかの異なる Linux で上記の動作を確認しました。]


編集:上記の根本的な問題を誤解しています。さらに調査すると、join()シグナル処理を妨げているのはメイン スレッドの呼び出しです。これは、スレッド全体が終了するまでシグナルが実際に延期されていることを意味します。したがって、これは実際にはまったく関係ありませんraw_input(結合が完了しないようにバックグラウンド スレッドがブロックされているという事実だけです)。

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

python - Pygame と Python のすべてのコンピューターでスプライトを均等に移動させるにはどうすればよいですか?

スプライトを均等に動かすことに問題があります。現在、whileループを使用してそれらを移動していますが、これの問題は、コンピューターが高速であるほど、ループが高速になり、スプライトが高速に移動することです。pygame でタイマー/クロック機能 (待機?) を試しましたが、待機中にカーソルがフリーズするため、カーソルがびくびくします。

マルチスレッドが解決策ですか?

これが私の問題のビデオです。 http://www.youtube.com/watch?v=cFawkUJhf30

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

python - Python: 'thread._local オブジェクトに属性 'todo' がありません

私は現在、スレッドとそのすべてを使用して、Python ベースのデータグラム サーバーをプログラミングしています。

次の問題が発生しました。複数の割り当てスレッドを使用して、受信パッケージを異なる処理スレッドに割り当てています。Processing Threads 内では、threading.local() を使用してスレッドローカル変数を追跡しています。

現在、サーバーが高負荷 (約 2 秒で 2000 パケット) のときにどのように反応するかをテストしており、local()-Object の奇妙な動作に遭遇しました。

しばらくは問題なく動作しているように見えますが、ある時点で例外がスローされます。

処理スレッドの一部

そして、割り当てスレッド:

すべてのデバッグ出力を含む完全な出力:

ログでわかるようにprint "processing、処理スレッドのメイン関数に到達することはありませんが、しばらくの間はすべて正常に動作しているように見えます。

Web と StackOverflow で同様の問題を検索しましたが、何も見つかりませんでした。事前に助けてくれてありがとう、そして私のコーディングスタイルを許してください、私は数日間Pythonをプログラミングしているだけで、まだその機能のいくつかを使ってロープを学んでいます.

編集: もちろん、このサーバーにはこれ以上のものがあります。パケットを受信して​​割り当てスレッドに送信するメイン スレッドと、バックグラウンドでのその他の処理が多数あります。さらに、サーバーはまだ完成していませんが、他のことを始める前に受信を機能させたいと思っています。

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

python - マルチスレッドでPythonマルチプロセッシングプロキシオブジェクトを使用する方法

標準のクライアントサーバーモデルでpyhtonのマルチプロセッシングパッケージを使用しています。サーバーには、メソッドを介して登録し、クライアントからプロキシを介して(クラスに基づいて)使用
するいくつかのタイプのオブジェクトがあります。BaseManager.registerAutoProxy

複数のクライアントスレッドからこれらのプロキシを使用しているときにランダムエラーがポップアップしました。いくつか読んだ後、プロキシインスタンス自体がスレッドセーフではないことがわかりました。Pythonマルチプロセッシングドキュメントから参照してください:

プロキシのスレッドセーフ
ロックで保護しない限り、複数のスレッドのプロキシオブジェクトを使用しないでください。(同じプロキシを使用する異なるプロセスで問題が発生することはありません。)

私のシナリオはこれに完全に適合します。OK、なぜ失敗するのか知っています。しかし、私はそれが機能することを望んでいます:)それで私はアドバイスを求めます-これをスレッドセーフにするための最良の方法は何ですか?
私の特定のケースは、(a)90%の時間、単一のクライアントスレッドで作業し、(b)プロキシの背後にある実際のオブジェクトスレッドセーフであり、(c)同じプロキシの複数のメソッドを呼び出したい場合です。 -同時にオブジェクト。

いつものように、インターネット、私を助けてくれる人は生き続け、決して死ぬことはありません!頑張っている人も慰め賞をもらえるかもしれません。

ありがとう、
ヨナタン

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

python - Python:クラス内からプロセスにメッセージを送信します

この質問は不明確かもしれません-もしそうなら、それはおそらく私が質問の仕方を完全に知っているわけではないからです-しかし、ここに行きます:

関数を呼び出したい Python クラスがあります。

クラスは、関数が操作する必要があるデータにアクセスできません。基本的に、関数を呼び出す別のプロセスにクラスからメッセージを送信したいと考えています。何かのようなもの:

呼び出しには、実行されるFoo.bar(phonenumber)追加の効果が必要です-これはどのように達成できますか?functiondata

乾杯!

0 投票する
5 に答える
85473 参照

python - キャンセル可能な threading.Timer in Python

特定の時間までカウントダウンするメソッドを作成しようとしていますが、再起動コマンドが指定されていない限り、タスクを実行します。threading.Timerしかし、Pythonクラスではタイマーをキャンセル可能にすることはできないと思います。

上記のコードがどういうわけか間違っていることは知っています。ここで親切なガイダンスをいただければ幸いです。

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

python - マルチスレッドのPythonプロセスが実行されると、OSはプロセスの強制終了を開始します

これは最も奇妙なことです!

Pythonで書かれたマルチスレッドのクライアントアプリケーションがあります。スレッドを使用して、ページのダウンロードと処理を同時に行っています。ボトルネックがこのアプリケーションのプロセッサ(帯域幅ではない)であることを除いて、cURLマルチハンドルを使用するので、スレッドプールを使用する方が効率的です。

私は64bi7ロッキング16GBRAMを持っています。ビーフィー。Pandoraを聴き、StackoverflowとBAMをトローリングしながら、80スレッドを起動します。親プロセスがメッセージで終了することがあります

Killed

また、1つのページ(Chromeでは独自のプロセス)が停止する場合もあります。また、ブラウザ全体がクラッシュすることもあります。

ここに少しのコードを見たい場合は、その要点を以下に示します。

親プロセスは次のとおりです。

そして、これがClientThreadの要点です。

編集:ああ、そうです...質問をするのを忘れました...明白なはずです:なぜ私のプロセスが殺されるのですか?それはOSレベルで起こっていますか?カーネルレベル?これは、開いているTCP接続の数に制限があるためですか?一度に実行できるスレッド数の制限ですか?の出力はcat /proc/sys/kernel/threads-maxです257841。だから...そんなことはないと思います...

私はそれを持っていると思います...OK...私は私のドライブにスワップスペースがまったくありません。今、スワップスペースを作成する方法はありますか?私はFedora16を実行しています。スワップがありました...その後、すべてのRAMを有効にすると、魔法のように消えました。テーリング/var/log/messages私はこのエラーを見つけました: