[英]Difference between Queue and Sets Python
如果存在多线程和一个向列表添加值的函数以及另一个获取该值的函数。 与之不同的是:
import queue
scrape = queue.Queue()
def scrape():
scrape.put('example')
def send():
example = scrape.get()
print (example)
scrape = set([])
def scrape():
scrape.add('example')
def send():
example = scrape.pop()
print (example)
为什么人们使用170-180行的队列模块,如果条件减慢了这种情况的过程,如果他们可以使用集合,这也给了他们重复过滤的优势。
Queues
维护可能非唯一元素的排序。 另一方面, Sets
不维护排序,也可能不包含重复项。
在您的情况下,您可能需要记录每个被刮掉的东西和/或刮擦它的相对顺序。 在这种情况下,请使用queues
。 如果您只想要列出您所抓取的独特内容,并且不关心刮取它们的相对顺序,请使用sets
。
正如@mata
指出的那样,如果多个线程正在生成和消耗它们,则应该使用queue
。 Queues
实现了使用生产者/消费者threads
所需的阻止功能。 Queues
是线程安全的,而sets
则不是。
在这个例子中来自docs:
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
get
消费者线程(即worker
)块,直到queue
有东西要获取, join
生成器线程块,直到消耗它放入queue
每个项目,并且消费者线程中的task_done
告诉队列该项目它得到了消耗。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.