我是python新手,开始学习一些高级概念。这里我使用python队列来消费和生产线程。这是线程安全的吗?在这里,我向队列添加列表项,并在使用者线程中检索它。有什么最好的办法吗?在
from queue import Queue
import threading
import time
class producer(threading.Thread):
def __init__(self, list_of_numbers):
threading.Thread.__init__(self)
self.list_items = list_of_numbers
def run(self):
for i in self.list_items:
queue.put(str(i))
class consumer(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
while queue.not_empty:
queue_ret = queue.get()
print("Retrieved", queue_ret)
queue = Queue()
producers = producer([10,20,5,4,3,2,1])
consumers = consumer()
producers.start()
consumers.start()
producers.join()
consumers.join()
文档明确声明队列是线程安全的:
https://docs.python.org/2/library/queue.html
要完成使用者线程,可以将sentinel值推送到队列中,如下所示:
首先用队列初始化消费者类。在
然后加上queue.task\u完成()位于使用者线程类的末尾。这将告诉线程以后忽略该队列项队列.get()电话。最终,这意味着您的队列将“清空”,线程将完成其工作。在
相关问题 更多 >
编程相关推荐