【发布时间】:2017-08-24 15:11:19
【问题描述】:
我在 Python 中有一个生产者 - 消费者问题的变体(我希望有多个生产者可以只生产一个项目并立即阻塞等待它被消费,并且消费者不会阻塞并定期轮询如果有东西要消耗...),我想知道以下代码是否安全地实现了这一点。
我对在 Python 中检查 None 是否是线程安全的特别感兴趣:
class Worker(object):
def __init__(...):
self.item = None
self.item_lock = threading.Lock()
self.item_consumed = threading.Condition()
def produce_something(...):
with self.item_lock:
self.item = make_a_complicated_data_structure()
with self.item_consumed:
while self.item is not None:
self.item_consumed.wait()
def consume_it():
if self.item is None:
return
with self.item_consumed:
do_something_with(self.item)
self.item = None
self.item_consumed.notify()
假设有一堆线程在运行produce_something,而一个线程定期轮询consume_it。
我有几个检查“不是无”或“没有”。这些会造成问题吗?例如。会发生一些邪恶的事情还是这些检查线程安全?
【问题讨论】:
标签: python multithreading thread-safety