多线程工具

时间:2013-06-25 10:14:49

标签: python python-multithreading

我仍然是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()的结果返回不同的错误代码(只需记住一些事项)。

如果信息不足,我道歉;如果您需要,可以随时询问更具体的信息。真的很棒的人,我很感激能得到的所有帮助,我只是想深入了解这些东西!谢谢!

1 个答案:

答案 0 :(得分:2)

线程有一些开销,它们都共享相同的CPU核心,线程适合等待用户输入或下载文件和其他你不受限制的东西,如果你需要更多的计算能力,我建议你使用多处理模块(见Multiprocessing vs Threading Python

线程的另一个问题是它们会锁定&#39;因为全局解释器锁定,这是因为任何时候只允许一个线程写入内存,荒谬的结果是许多线程因为他们都在等待访问内存而导致程序失效