我有一个带有tkinter GUI(Python 2.7)的程序,用户可以从中启动一些或多或少计算密集型任务。其中大部分导致写入磁盘的文件或显示结果的交互式pyplot窗口,但没有一个反馈到主任务。
我以前从未做过多线程,我正在尝试决定使用哪个库。 subprocess
似乎是系统调用(这不是),multiprocessing
似乎关心并行执行较大的任务(使用池和队列等),threading
..我查看了官方文档,但有点不清楚我将如何使用它。
对我来说理想的解决方案是“简单地”表示函数调用,它触发计算和绘制某些数据的方式,它将独立于主程序执行,因此用户可以继续执行他们的操作而无需等待功能完成(通常需要几秒钟到一分钟) - 情节最终会弹出。
更新 原来我想要并行启动的任务包含绑定方法,因此不可选择且不能并行使用。在我有时间弄清楚如何改变之前,我需要处理其他一些事情 - 不过我会回到这里!
答案 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()