gpt4 book ai didi

Python GUI 保持卡住等待线程代码完成运行

转载 作者:太空宇宙 更新时间:2023-11-04 07:35:47 25 4
gpt4 key购买 nike

我有一个 python GUI 程序,它需要执行相同的任务但有多个线程。问题是我调用了线程,但它们不是并行执行而是顺序执行。第一个执行,它结束然后第二个,等等。我希望他们独立开始。

主要组成部分有:
1.菜单(查看)
2. ProcesStarter( Controller )
3.进程( Controller )

菜单 是您点击“开始”按钮的地方,该按钮调用ProcesStarter 中的函数。

ProcesStarter 创建Process 对象和线程,并在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 按钮时,GUI 被锁定,直到两个线程都完成执行。这个想法是线程应该在后台工作并并行工作。

最佳答案

在将它指定为线程的目标时立即调用 procesor.start_process():

#use this
procesor_thread = Thread(target=procesor.start_process)

#not this
procesor_thread = Thread(target=procesor.start_process())
# this is called right away ^

如果您立即调用它,它会返回 None,这是 Thread 的有效目标(它什么都不做),这就是为什么它按顺序发生,线程什么都不做。

关于Python GUI 保持卡住等待线程代码完成运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36230333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com