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
python线程同步_Python_Multithreading_Pyqt_Qthread - Fatal编程技术网

python线程同步

python线程同步,python,multithreading,pyqt,qthread,Python,Multithreading,Pyqt,Qthread,我有一个python应用程序,如下所示: 主线程是GUI 有一个配置线程甚至在GUI之前就启动了 配置线程启动其他几个独立线程 =>如何让GUI知道所有这些“独立线程”(3.)都已完成?我如何在我的程序中检测到它(请给我一个大概的想法) 我知道信号量,但我搞不懂,因为这在逻辑上比我处理线程时习惯的要复杂一些 PS所有这些线程都是PyQt中的QThread,如果这很重要的话,但我对此表示怀疑 谢谢这是一款非常好的线程间通信工具,无需担心锁或其他互斥锁。它具有一对方法,task_done()和joi

我有一个python应用程序,如下所示:

  • 主线程是GUI
  • 有一个配置线程甚至在GUI之前就启动了
  • 配置线程启动其他几个独立线程
  • =>如何让GUI知道所有这些“独立线程”(3.)都已完成?我如何在我的程序中检测到它(请给我一个大概的想法)

    我知道信号量,但我搞不懂,因为这在逻辑上比我处理线程时习惯的要复杂一些

    PS所有这些线程都是PyQt中的QThread,如果这很重要的话,但我对此表示怀疑

    谢谢

    这是一款非常好的线程间通信工具,无需担心锁或其他互斥锁。它具有一对方法,task_done()和join(),用于发出任务完成信号并等待所有任务完成。以下是文档中的一个示例:

    def worker():
        while True:
            item = q.get()
            do_work(item)
            q.task_done()
    
    q = Queue()
    for i in range(num_worker_threads):
         t = Thread(target=worker)
         t.daemon = True
         t.start()
    
    for item in source():
        q.put(item)
    
    q.join()       # block until all tasks are done
    

    确保所有其他线程都已启动,然后对其他线程中的t执行
    :t.wait()
    将阻止,直到其他线程完成()。如果使用
    threading
    模块,请使用
    t.join()
    。我想他只是想知道这些线程何时完成<代码>对于线程中的t:t.join()(或者对于
    QThreads
    .wait()
    )就可以了。我最后使用了一个简单的计数器,可以在互斥锁中访问它。一旦计数器等于线程数,我就调用函数。所以工作流程是这样的:1。启动所有线程2。每个小线程在接近finish3时调用我的方法。它在互斥4中向全局计数器添加1。一旦全局变量等于线程数,则执行代码