在Python中实现“即发即弃”并行线程的最简单方法是什么?

时间:2015-07-07 10:19:03

标签: python multithreading

我有一个带有tkinter GUI(Python 2.7)的程序,用户可以从中启动一些或多或少计算密集型任务。其中大部分导致写入磁盘的文件或显示结果的交互式pyplot窗口,但没有一个反馈到主任务。

我以前从未做过多线程,我正在尝试决定使用哪个库。 subprocess似乎是系统调用(这不是),multiprocessing似乎关心并行执行较大的任务(使用池和队列等),threading ..我查看了官方文档,但有点不清楚我将如何使用它。

对我来说理想的解决方案是“简单地”表示函数调用,它触发计算和绘制某些数据的方式,它将独立于主程序执行,因此用户可以继续执行他们的操作而无需等待功能完成(通常需要几秒钟到一分钟) - 情节最终会弹出。

更新 原来我想要并行启动的任务包含绑定方法,因此不可选择且不能并行使用。在我有时间弄清楚如何改变之前,我需要处理其他一些事情 - 不过我会回到这里!

2 个答案:

答案 0 :(得分:0)

多处理库可能是您最好的选择,只需创建一个流程并启动它。从手册:https://docs.python.org/2/library/multiprocessing.html

from multiprocessing import Process

def f(name):
    print 'hello', name

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()

退出时,您可能希望等待结果,因此请添加join()方法:

p.join()

或者,如果你只是想等一会儿:

p.join(timeout=1)

答案 1 :(得分:0)

想知道这是否有帮助。这是我用来在Python中执行线程的简单模式

from threading import Thread

class Operation(Thread):
    def __init__(self):
        """Initialize"""
    def run(self):
        """Implement the run method. This will get executed when you 
           instantiate and call the start method"""

def main():
    """ main program"""
    mythread = Operation()
    mythread.start()
    ...
    mythread.join()