python线程同步

时间:2012-04-19 21:54:43

标签: python multithreading pyqt qthread

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

  1. 主线程是GUI
  2. 有一个甚至在GUI
  3. 之前启动的配置线程
  4. config thread启动其他一些独立的线程
  5. =>我怎样才能让GUI知道所有这些“独立线程”(3.)已经完成了?我如何在我的程序中检测到它(只是给我一般的想法)

    我知道Semaphores但是我无法理解它,因为这比我在处理线程时习惯的更复杂一些。

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

    感谢

1 个答案:

答案 0 :(得分: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