【问题标题】:python threads synchronizationpython线程同步
【发布时间】:2012-05-01 12:25:38
【问题描述】:

我有一个这样的 python 应用程序:

  1. 主线程是GUI
  2. 有一个配置线程甚至在 GUI 之前就启动了
  3. 配置线程启动其他几个独立线程

=> 我怎样才能让 GUI 知道所有这些“独立线程”(3.)已经完成?我如何在我的程序中检测到它(只是给我大致的想法)

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

PS 所有这些线程都是来自 PyQt 的 QThreads,如果这很重要,但我对此表示怀疑。

谢谢

【问题讨论】:

标签: python multithreading pyqt qthread


【解决方案1】:

Queue module 非常适合在线程之间进行通信,而无需担心锁或其他互斥体。它具有一对方法,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

【讨论】:

  • 我想他只是想知道这些线程什么时候完成。 for t in threads: t.join()(或者在QThreads.wait()的情况下)可以正常工作。
  • 我最终使用了一个在互斥锁中访问的简单计数器。一旦该计数器等于线程数,我就会调用我的函数。所以工作流程是这样的: 1. 启动所有线程 2. 每个小线程在接近完成时调用我的方法 3. 它向互斥锁中的全局计数器加 1 4. 一旦全局变量等于线程数,代码就是执行
猜你喜欢
  • 1970-01-01
  • 2011-11-09
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 2014-12-15
  • 2011-12-28
  • 1970-01-01
相关资源
最近更新 更多