問題タブ [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.
python - Pythonキューが正しいデータを渡していない
pyftpdlib モジュールの適応に役立つ Queue モジュールを見つけました。私は非常に厳密な FTP サーバーを実行しています。私の目標は、アップロードできるファイル名を制限することです。これは、ユーザーが自分の好きなものをアップロードできないようにするためです (実際にはアップロード クライアントのバックエンドであり、完全な FTP サーバーではありません)。
私は ftpserver Authorizer にこれを持っています:
私の問題は、サーバーの起動後、初めてファイルを STOR すると、最初の db 呼び出しが行われ、すべての世界が適切に取得されることです。しかし、次に別のワールドを追加すると (たとえば、is_synced=True
1 つに設定しても、self.q.get()
.has_perm() はファイルがアップロードされるたびに呼び出され、ライブ データを返す必要があります (ファイルが許可されているかどうかを確認するため))。 )。
たとえば、真新しいサーバー:
- STOR file.zip、
self.q.get()
戻り値<World1, World2>
- 他の方法などでデータベースを更新します
- STOR file2.zip、内部
fetch_worlds
、print worlds
戻ります<World1, World2, World3>
がself.q.get()
戻ります<World1, World2>
Queue モジュールを見つけたところ、役立つように思えましたが、実装を正しく行うことができません。
(また、タグを追加できませんでしたpyftpdlib
)
python - "Can't start a new thread error" in Python
I am running a script which extracts the information from debian packages and saves it in a database.
After extracting information from about 100 packages an error occurs. The error is "can't start a new thread" Why am I facing this error? What can be the possible solution to it?
This is the code used to save the data :
Just like Description
, there are around !2 more properties of the package which are saved in a similar way.
This is the full traceback that I get when the error occurs :-
I am not writing any code to handle the threads.
python - Pythonのデーモンスレッドからメインスレッドで例外をトリガーする
Pythonのデーモンスレッドから、ブロッキングコードを実行しているメインスレッドで、どのように例外をトリガーしますか?
現在のプロセスを終了する必要があることを示すレコードをデータベースで定期的にチェックするデーモンスレッドがあります(つまり、ユーザーが[キャンセル]ボタンを押した)。私のメインの非デーモンスレッドでは、正常に終了するように簡単に変更できない外部プロセスへのブロッキング呼び出しを実行しています。ただし、手動でトリガーすると、メインスレッドは通常のKeyboardInterruptを適切に処理できます。
したがって、デーモンスレッドが終了コマンドを受信した場合、メインスレッドで例外を発生させてプロセスを終了するにはどうすればよいですか?
google-app-engine - スレッドセーフ=いいえのGoogleAppEnginepython2.7での「ロック解除されたロックの解放」エラー
「ロック解除されたロックの解放」エラーがGoogleAppEngine(gqueues)のアプリのログにときどき表示され、その理由を理解できません(以下の完全なスタックトレース)。このエラーが発生する理由を誰かが知っていますか?
興味深いことに、このアプリはpython2.7でthreadsafe=NOを使用しているため、ロックが発生したり、ロックエラーが発生したりするのは奇妙に思えます。
裏話:GQueuesはpython2.5にあり、4月の初めに2.7に移行し、threadsafe=Trueに設定しました。1週間はすべて正常に機能しました。その後、4月9日の朝、アプリ全体にアクセスできなくなり、500個のエラーが発生しました。30秒を超えるレイテンシを持つ新しいサーバーインスタンスを生成し続けました。ログに「ロック解除されたロックをロック解除できません」というエラーが表示されていることに気付きました。移行中にコードにロックメカニズムを追加しなかったため、これはエラーが参照しているアプリエンジンのロックであると想定しました。とにかく、私はアプリを以前のバージョンにロールバックしましたが、それはまだPython 2.5にあり、すべてが再び機能し始めました。
4月の後半にAppEngineDowntimeNotifyは、Python2.7アプリで問題を引き起こしている4月9日の終わりに問題があったことを明らかにしました。 https://groups.google.com/d/topic/google-appengine-downtime-notify/QL8TmRn6Ay4/discussion
私はGoogleのChristinaIlventoにフォローアップしましたが、彼女は今すぐPython 2.7に戻って、threadsafe=Trueに変更しても問題ないと考えました。2.7に戻しましたが、threadsafe = Falseのままにしました。これは、スレッドを再度オンにする前に、2.7ですべてが正常に機能することを確認するために数週間かかると考えたためです(これが問題の原因であると想定しました)。数週間はすべて正常に機能しましたが、スレッドが無効になっている場合でも、この「ロック解除されたロックの解放」エラーが表示されます。誰かがここで何が起こっているのか知っていますか?
Christinaは、ここに投稿するとAppEngineチームがフォローアップすることを提案しました。
更新:エラーの1つの完全なバックトレースは次のとおりです
python - Python でスレッドのすべての統計を取得する
私のアプリケーションでは、threading モジュールを使用して作成された多くのスレッドがあり、それらに関する情報をできるだけ多く取得する必要があります。問題なく、実行時間に関する情報を取得できます。ただし、スレッドのメモリ使用量や CPU 使用量 (CPU 時間が最適) などの情報を取得する方法。
yappi モジュールを見つけましたが、私には合いません。
python-2.7 - サブプロセスを呼び出す元のプロセスにデータを返す
これを新しい質問として投稿するよう誰かに言われました。これは、スポーン スレッドからの新しい WX Python GUI のインスタンス化のフォロー アップ です。
生成されたスレッド (Thread2) から呼び出されるスクリプトに次のコードを実装しました。
GUI2 を実行している新しいプロセスで、「完了」ボタンのイベント ハンドラが 4 つのデータ セットを Thread2 に返し、それ自体を破棄します (GUI2)
現在、この実装は新しいプロセスで別のメイン GUI を生成します。私がやりたいことは、データを元のプロセスに戻すことです。ありがとう。
python - PyThread_acquire_lock-キーの取得に関する問題
私はマルチスレッドのPythonアプリケーションを書いています。
メインスレッドは、5つのワーカースレッドのスレッドプールを作成します。メインスレッドは、モニタースレッドも作成します。
合計:6スレッド+1メインスレッド=7
すべてのスレッドはMySQLサーバーと通信します(mysqldb-> libmysqlclient_r)
私のSQLラッパーでは、DBクエリ関数にThreading.Lockを追加しました。このロックはグローバルロックであり、DBを照会するすべてのスレッドがそれを使用します。
ある時点でメインスレッドがスタックするまで(すべてのスレッドも同様に)、すべてが正常に機能します。GDBデバッガーを接続すると、次のことに気付きました。(情報スレッド)
Th1 =メインスレッド、Th2 =モニタースレッド、Th3-Th7-ワーカースレッド
モニタースレッドの横にあるすべてのスレッドがsem_wait()を待機していることに気付きました。
ただし、モニタースレッドはロックを取得および解放できます(30秒ごとに実行され、表示されるselect()はsleep(30)によるものです)。誰もロックを取得していないので、なぜ残りのスレッドがsem_wait()でスタックしているのかわかりません。
これを解決する方法はありますか?これをデバッグする方法は?
ありがとうございました
python - マルチスレッドによるPythonスクリプトの最適化
こんにちはみんな!私は小さなウェブページクローラー関数を書きました。しかし、私はマルチスレッドに不慣れであり、それを最適化することができませんでした。私のコードは次のとおりです。
ご覧のとおり、ここでは特定の時間に候補者から1つのURLを取得します。このスクリプトをマルチスレッド化して、候補から少なくともN個のURLを取得し、その作業を実行できるようにしたかったのです。誰かが私を導くことができますか?リンクや提案はありますか?
python - Twisted のコードを特定のスレッドに延期する
Twisted と pyCUDA を使用してサーバーを作成しています。CUDA の動作に関する制限は、CUDA コンテキストを初期化したスレッドと同じスレッドでアクセスする必要があることです。しかし、Twisted のスレッドプールの実装では、特定のスレッドを要求することはできません。
たとえば、複数のクライアントがサーバーに接続されている場合、それらは CUDA で実行される計算を要求します。同じ CUDA オブジェクトで複数の操作が要求されます (初期化にはコストがかかります)。deferToThread 関数を使用したかったのですが、これでは特定のスレッドを延期することはできません。「一部の」スレッドだけです。私がやりたいことは、理想的には、deferToThread のようなメカニズムを使用することですが、コードが実行されるスレッドを指定することです。任意の提案をいただければ幸いです。おそらく Twisted はこのプロジェクトの間違った方法です。
python - Python で同じ関数を別の結果にスレッド化する
特定の関数を並行して実行するプログラムが必要です。ただし、その関数は、ユーザーがプログラムを操作する方法に応じて、さまざまな結果に分岐します。ダウンロードとアップロードの 2 つのオプションがある、threadGUI.py という名前のモジュール内に単純な GUI があります。これらのオプションは、関数に関連する変数を含む辞書を作成します。これらの辞書は、thread_test.py モジュールに格納されているメイン ディクショナリに格納されます。これらは順番に実行するとうまくいきますが、並行して実行しようとすると何か問題が発生します。threadGUI.py のスレッド関連のコード:
上記の関数は、thread_test.py モジュール内の begin_test 関数を呼び出します。関数は次のようになります。
これは私のコードの単純化された例です。私の問題は、私のコードが両方ではなく、2 つのうち 1 つの関数のみを実行していることです。したがって、ダウンロード、アップロード、ダウンロードを呼び出す辞書を作成すると、目的のパターンではなく、3 つのダウンロードが実行されます。