如何在for循环中依次在python中启动线程?

时间:2017-11-07 12:59:16

标签: python multithreading for-loop

我想在for循环中轮流启动线程,但是下一个线程不应该在当前的线程完成之前启动。请帮我解决这个问题。

我想实现这一目标,因为我有一个GUI,每个循环都会出现一个进度条并运行,GUI不会被锁定(它不会给那个丑陋的"没有回应& #34;错误)

for op in ["op1", "op2"]:
    start_thread()

def start_thread():
     display_and_run_progress_bar()
     do_the_operation()
     when_op_is_completed_destroy_progress_bar()

1 个答案:

答案 0 :(得分:2)

要在自己的线程中运行每个op,但一次只运行一个,在启动每个线程后,您必须joinjoin告诉主进程等待线程完成后再继续。使用您的伪代码样式:

for op in ["op1", "op2"]:
    thread = start_thread(op)
    thread.join()

根据您使用的线程库,它会有所不同,但请参阅https://docs.python.org/2/library/threading.html#threading.Thread.join

如果你在主线程上运行上面的代码,那仍然会锁定GUI。我建议的不是为每个操作创建一个新线程,而是创建一个逐个执行每个操作的单个线程,如下所示:

thread = threading.Thread(target=do_ops, args=[["op1", "op2"]])
thread.start()

def do_ops(ops):
    for op in ops:
        display_and_run_progress_bar()
        do_the_operation()
        when_op_is_completed_destroy_progress_bar()

现在所有的操作都在一个主进程之外的单个线程中运行,因此它不会锁定GUI。