gpt4 book ai didi

python - 队列和集合 Python 之间的区别

转载 作者:太空宇宙 更新时间:2023-11-03 14:10:09 26 4
gpt4 key购买 nike

如果存在多线程,一个函数向列表添加一个值,另一个函数获取该值。有什么区别:

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 行带有 if 条件的队列模块会减慢这种情况下的进程,如果他们可以使用集合,这也为他们提供了重复过滤的优势。

最佳答案

Queues维护可能非唯一元素的顺序。 Sets ,另一方面,不保持顺序并且可能不包含重复项。

在您的情况下,您可能需要记录每个被抓取的内容和/或被抓取的相对顺序。在这种情况下,使用 queues .如果你只想要一个你抓取的独特事物的列表,而不关心你抓取它们的相对顺序,请使用 sets .

作为@mata指出,queue如果多个线程正在生产和消费它,则应该使用它。 Queues实现与生产者/消费者一起工作所需的阻塞功能 threads . Queues是线程安全的,sets不是。

在这个来自文档的例子中:

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在消费者线程中告诉队列它拿到的元素已经被消费了。

关于python - 队列和集合 Python 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39248452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com