Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在for循环中在python中依次启动线程?_Python_Multithreading_For Loop - Fatal编程技术网

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

如何在for循环中在python中依次启动线程?,python,multithreading,for-loop,Python,Multithreading,For Loop,我希望在for循环中轮流启动线程,但是在当前线程完成之前,下一个线程不应该启动。请帮我解决这个问题 我想实现这一点,因为我有一个GUI,每个循环都会出现一个进度条并运行,GUI不会被锁定(它不会出现丑陋的“不响应”错误) 要在自己的线程中运行每个op,但一次只能运行一个,您必须在启动每个线程后加入join。join告诉主进程等待线程完成后再继续。使用伪代码样式: for op in ["op1", "op2"]: thread = start_thread(op) thread.

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

我想实现这一点,因为我有一个GUI,每个循环都会出现一个进度条并运行,GUI不会被锁定(它不会出现丑陋的“不响应”错误)


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

for op in ["op1", "op2"]:
    thread = start_thread(op)
    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。

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

for op in ["op1", "op2"]:
    thread = start_thread(op)
    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。

如果在启动新的操作之前等待一个线程完成,这实际上不是多线程,是吗?@Ev.Kounis是的,这非常简单。我没有太多时间提供样品code@Mat这样我就不会锁定GUI。我更新了这个问题。如果在启动新的GUI之前等待一个GUI完成,这实际上不是多线程,是吗?@Ev.Kounis是的,这非常简单。我没有太多时间提供样品code@Mat所以我不会锁定GUI。我更新了问题。问题是,代码使用MySQL连接器,连接到数据库并从数据库读取。当所有线程同时运行时,它们使用相同的连接器,我得到
OperationalError:(2013,“在查询过程中与MySQL服务器失去连接”)
error.OK,但我认为在我的回答中,一次只能运行一个线程,因为
thread.join()
将挂起直到线程完成。当然,你必须让
start\u thread
返回一个thread对象,这样才能工作。我更新了我的答案,以便更多地关注在主线程上运行此线程的问题,以免阻塞GUI。问题是,代码使用MySQL连接器,连接到数据库并从数据库读取。当所有线程同时运行时,它们使用相同的连接器,我得到
OperationalError:(2013,“在查询过程中与MySQL服务器失去连接”)
error.OK,但我认为在我的回答中,一次只能运行一个线程,因为
thread.join()
将挂起直到线程完成。当然,你必须让
start\u thread
返回一个thread对象,这样才能工作。我更新了我的答案,以便更多地关注在主线程上运行这个问题,以免阻塞GUI。