gpt4 book ai didi

multithreading - python的queue.Queue.put()方法是异步的吗?

转载 作者:行者123 更新时间:2023-12-03 13:16:59 24 4
gpt4 key购买 nike

<分区>

如果我作为 worker 运行一个具有以下函数的线程,

q = queue.Queue()

def worker():
while True:
t = {}
for i in range(3):
t['a'] = i
q.put(t)

队列中填充了完全相同的字典,即 {'a': 2} 而不是序列 {'a': 0}, {'a' : 1}, {'a': 2}。我认为这是因为 put() 方法在 for 循环完成并且 i 的最后一个值为 2 之后运行。我的解释对吗?

现在,如果我将字典的实例化移动到 for 循环中,

def worker():
while True:
for i in range(3):
t = {'a': i}
q.put(t)

队列中填充了所需的序列。我的解释是,首先,我在内存中创建一个字典对象,然后开始一个 for 循环并重新分配它的值 3 次,但是 put() 调用发生在循环完成之后。在第二个实例中,我在 for 循环的每次迭代中创建一个新的字典对象,因此当 put() 调用发生在循环之后时,它们使用自己的键访问字典的 3 个不同实例 -值对。

谁能阐明幕后发生的事情?

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