私は同じタスクを実行する必要があるいくつかのスレッドを持つPython GUIプログラムを持っています。問題は、私はスレッドを呼び出すが、それらは並列ではなく逐次実行することである。最初のものが実行され、それが終了し、次に2番目のものなどがあります。Python GUIは、スレッドコードの実行が完了するのを待っている間にフリーズしています
主なコンポーネントは次のとおりです。
1.メニュー(ビュー)
2. ProcesStarter(コントローラ)
3.プロセス(コントローラ)あなたは、 "スタート" をクリックしてどこ
メニューがあります機能を呼び出すボタンProcesStarter。
ProcesStarterはプロセスのオブジェクトとスレッドを作成し、forループ内のすべてのスレッドを開始します。
メニュー:
class VotingFrame(BaseFrame):
def create_widgets(self):
self.start_process = tk.Button(root, text="Start Process", command=lambda: self.start_process())
self.start_process.grid(row=3,column=0, sticky=tk.W)
def start_process(self):
procesor = XProcesStarter()
procesor_thread = Thread(target=procesor.start_process())
procesor_thread.start()
ProcesStarter:
class XProcesStarter:
def start_process(self):
print "starting new process..."
# thread count
thread_count = self.get_thread_count()
# initialize Process objects with data, and start threads
for i in range(thread_count):
vote_process = XProcess(self.get_proxy_list(), self.get_url())
t = Thread(target=vote_process.start_process())
t.start()
プロセス:
class XProcess():
def __init__(self, proxy_list, url, browser_show=False):
# init code
def start_process(self):
# code for process
私は、GUIのボタンFを押すとまたは "Start Process"を実行すると、両方のスレッドが実行を終了するまでGUIがロックされます。 スレッドはバックグラウンドで動作し、並列に動作するはずです。
完全に正確ではない、 'スレッド(ターゲット=なし).start()'完全に有効である、言及しないように、そのオブジェクトのメソッド呼び出し可能なので、最初に初期化してからスレッド内でメソッドを実行することに何も問題はありません。 –
ありがとう!私は今日何かを学んだ! (私も私の答えを編集します) –
これにコードが変更され、期待どおりに動作しています! – nullwriter