gpt4 book ai didi

python迭代器和线程安全

转载 作者:太空狗 更新时间:2023-10-30 03:07:51 25 4
gpt4 key购买 nike

我有一个由两个函数操作的类。一个函数创建一个小部件列表并将其写入类:

def updateWidgets(self):
widgets = self.generateWidgetList()
self.widgets = widgets

另一个函数以某种方式处理小部件:

def workOnWidgets(self):
for widget in self.widgets:
self.workOnWidget(widget)

这些函数中的每一个都在它自己的线程中运行。问题是,如果 updateWidgets() 线程在 workOnWidgets() 线程运行时执行,会发生什么情况?

我假设作为 for...in 循环的一部分创建的迭代器将保留对 self.widgets 对象的某种引用?所以我将完成对旧列表的迭代...但我很想确定。

最佳答案

updateWidgets() 不会就地更改 self.widgets(这本来是个问题),而是用新列表替换它。对旧版本的引用至少会保留到 workOnWidgets() 中的 for 循环完成,因此这应该不是问题。

简单来说,你正在做的是这样的:

>>> l=[1,2,3]
>>> for i in l:
... l=[]
... print(i)
...
1
2
3

但是,如果您修改了要迭代的列表,就会遇到问题:

>>> l=[1,2,3]
>>> for i in l:
... l[2]=0
... print(i)
...
1
2
0

关于python迭代器和线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2744036/

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