4

時間のかかる命令中に Python の残りの部分をロックダウンすることなく、バックグラウンドで Python スレッドを実行する方法はありますか?

Python (pygtk) アプリケーションのバックグラウンド スレッドで時間のかかる計算を実行しようとしています。スレッドの仕組みを理解しています。問題は、任意のスレッドで高価な操作を実行するたびに (例: PIL の大きな画像の image.load() )、別のスレッドであっても、操作が完了するまですべての python スレッドをブロックすることです。

それで、Pythonの残りの部分をロックダウンせずにバックグラウンドでPythonスレッドを実行する方法はありますか? (GUI がロックダウンされない限り、どれだけ時間がかかるかは気にしません。GUI が一度に数秒間応答しなくなることはありません)。私の問題は、長い時間がかかる単一のコマンド(image.load()など)にあるため、スリープステートメントを使用しても機能しません。

4

2 に答える 2

3

pygtk を使用しているため、呼び出しましたthreads_init()か?

新しいバージョンの場合:

>>> from gi.repository import GObject
>>> GObject.threads_init()

そして古いもののために:

>>> import gobject
>>> gobject.threads_init()

また、スレッドから GUI メソッドを呼び出さないようにしてください。そうしないと、アプリケーションが奇妙な方法で壊れてしまいます。これを回避する簡単な方法は、次を使用することGObject.idle_addです。

idle_add(callable, user_data=None, priority=None) -> ソース ID 呼び出し可能受信 (user_data)

デフォルトのメインループに保留中の優先度の高いイベントがない場合に呼び出される callable を追加します。

于 2012-08-23T17:06:06.790 に答える
1

バックグラウンドで処理を行うには、python のサブプロセスを使用することもできます。sub_process (元の実行とは無関係) が作成され、特定の間隔で .poll を使用して、プロセスが完了したかどうかを確認できます。.communicate を実行すると、プロセス全体がサブプロセスの完了を待ちます。また、このドキュメントを参照できます:- threading-subprocess

また、Pythonで通常のスレッドを使用するだけで、問題を回避する方法があると思います。

于 2012-08-23T15:31:41.180 に答える