Python多线程:需要建议使用条件变量同步2个线程吗
我只知道多线程的基本概念,目前我遇到了一个需要帮助的情况 我有两项任务要完成,这两项任务都应该持续执行。问题是,第二个任务应该在第一个线程首先完成一些任务之后才开始。现在,这两个线程类大致如下所示:Python多线程:需要建议使用条件变量同步2个线程吗,python,multithreading,condition-variable,Python,Multithreading,Condition Variable,我只知道多线程的基本概念,目前我遇到了一个需要帮助的情况 我有两项任务要完成,这两项任务都应该持续执行。问题是,第二个任务应该在第一个线程首先完成一些任务之后才开始。现在,这两个线程类大致如下所示: finished = False # shared flag class first(threading.Thread): def __init__(self, cond, finished): threading.Thread.__init__(self)
finished = False # shared flag
class first(threading.Thread):
def __init__(self, cond, finished):
threading.Thread.__init__(self)
self.cond = cond
self.finished = finished
def run(self):
self.cond.aquire()
do_something()
self.finished = True #change the flag
self.cond.notify()
self.cond.release()
do_something_else()
class second(threading.Thread):
def __init__(self, cond, finished):
threading.Thread.__init__(self)
self.cond = cond
self.finished = finished
def run(self):
self.cond.aquire()
while self.finished == False:
self.cond.wait()
self.cond.release()
do_something()
然而,事实是,不管wait()和notify()如何,程序仍然随机执行。有人能帮我解决这个问题吗?谢谢。
第一类中的self.finished
是全局finished
值的副本,不是对它的引用,因此它与第二类的self.finished
没有实际关系
您可能应该创建一个全局
队列
对象(设计用于线程
模块)。让两个类都引用队列,让第一个线程向队列写入前进信号,让第二个线程阻塞,直到它读取前进信号。self。在class first
中,finished
是全局finished
值的副本,而不是对它的引用,因此它与第二类的自我完成的没有活的关系
您可能应该创建一个全局队列
对象(设计用于线程
模块)。让两个类都引用队列,让第一个线程向队列写入前进信号,让第二个线程阻塞,直到它读取前进信号。您可以完全避免同步。使用3个线程而不是2个线程
线程1a“执行一些任务”并终止。
线程1b从1a结束的位置开始,并且
线程2独立启动
(我还假设您知道,您无法有效地与Python线程共享CPU;这些线程只适用于并行等待I/O。当您需要CPU绑定的并行化时,可以使用。)您可以完全避免同步。使用3个线程而不是2个线程
线程1a“执行一些任务”并终止。
线程1b从1a结束的位置开始,并且
线程2独立启动
(我还假设您知道,您无法有效地与Python线程共享CPU;这些线程只适用于并行等待的I/O。当您需要CPU绑定的并行化时,您可以使用。)请在代码中演示如何使用这些类请在代码中演示如何使用这些类谢谢Russell的回答!!谢谢你的回答,拉塞尔!!