2

だから私は大きな問題に直面しています。現在、マルチプロセッシング/サブプロセッシングを使用して、Tkinter アプリケーションの隣でファイルを実行しようとしていますが、プロセスを実行するとすぐに、プロセスが完了するまで GUI がフリーズします。これを回避する方法はありますか?SOに関する他の質問も見ましたが、役に立ちませんでした(root.update()しかし、それが期待どおりに機能していないことを示唆するものを見つけました.

注: GUI 要素は含めていません。これを試すための基本的なプログラム (数行のみ) を作成し、同じ問題が発生するためです。また、Windows を実行していることにも注意してください。

コード (文脈から外したもの):

def run_file(self):
    self.root.update()
    sub_process=subprocess.call(self.sub_proc_args)

process=multiprocessing.Process(target=self.run_file())
process.start()
4

2 に答える 2

1

私は問題を見つけました(BrenBarnが指摘したターゲットの問題以外)。これが私の修正です:

(私はマルチプロセッシングを取りました。)

def run_file(self):
    sub_process=subprocess.Popen(self.sub_proc_args) #Open subprocess
    self.root.update() #Update GUI    
self.run_file() #Initiate sub_process

呼び出しを使用すると、呼び出しを実行すると戻り値を返す必要があるため、これが修正であることがわかりました。これにより、Tkinterはメインループを続行しなくなります。これは、を使用して修正されPopenます。

于 2012-06-16T02:35:28.140 に答える
1

そうすることで、マルチプロセッシングが使用できるようになる前にself.run_file()呼び出しています。run_file使用する必要がありますtarget=self.run_file(注、括弧なし)。

于 2012-06-16T02:24:59.403 に答える