我仍然是python脚本的新手,我正试图通过添加多线程支持来加速和平滑我的一些工具。我觉得我可能会错过 - 理解这里的一些工作流理论,所以如果我应该以另一种方式这样做,请随意重定向我的思维方式。基本上我要做的是以下内容:
==================================================================
###Pseudo-code -- I apologize if this does not follow existing conventions
main_function()
if do_stuff_function is not running:
Thread1 = new thread running do_stuff_function
do_stuff_function(args)
do some stuff
wait for 60 seconds (possibly using time.sleep())
end thread (tell main_function that the thread is done)
==================================================================
###Abridged code
def main(self):
check = True
index = 0
While index < 5:
if check == True:
check = False
thread1 = threading.Thread(target=self.doStuff, args=(self, index))
def do_stuff(self, index):
###Stuff happens here####
###iterate index and somehow return it (possibly a global variable)
time.sleep(60)
###somehow end the thread (still not entirely sure how to do that)
===================================================================
注意:
- 这个工具有一个gui,如果我在主循环中运行time.sleep(),它都会锁定并冻结,这就是为什么我认为多线程是一个很好的解决方案(随意纠正我如果这是错的)。或者可能是一种不同的等待方式,在等待时不会冻结整个线程。
- 程序在while循环中冻结,是否有办法在不必循环的情况下进行此检查,可能类似回调(如do_stuff()函数结束时的模拟按钮按下)?
- 我也想尝试为此添加一些错误检查,因此根据do_stuff()的结果返回不同的错误代码(只需记住一些事项)。
如果信息不足,我道歉;如果您需要,可以随时询问更具体的信息。真的很棒的人,我很感激能得到的所有帮助,我只是想深入了解这些东西!谢谢!
答案 0 :(得分:2)
线程有一些开销,它们都共享相同的CPU核心,线程适合等待用户输入或下载文件和其他你不受限制的东西,如果你需要更多的计算能力,我建议你使用多处理模块(见Multiprocessing vs Threading Python)
线程的另一个问题是它们会锁定&#39;因为全局解释器锁定,这是因为任何时候只允许一个线程写入内存,荒谬的结果是许多线程因为他们都在等待访问内存而导致程序失效