繁体   English   中英

队列和集Python之间的区别

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM