python len函数在set上是线程安全的吗?

python len函数在set上是线程安全的吗?,python,Python,Python 2.7。使用“导入集”导入的集 一个线程使用add函数向集合中填充对象是否安全,另一个线程通过调用集合上的len函数等待集合达到所需大小。没有保护措施 编辑:“直到集合至少达到指定的大小”len()是只读的,所以我不确定线程安全是什么意思。如果集合由不同的线程更新,至少不会使程序崩溃 如果您正在等待一个集合到达N个项目,那么在开始在线程中执行某些操作之前,您可能会得到>N个项目,因为在您开始工作时,可能已经添加了新项目。显然,没有任何保证 另外,如果在第二个线程中从集合中删除内容,

Python 2.7。使用“导入集”导入的集

一个线程使用add函数向集合中填充对象是否安全,另一个线程通过调用集合上的len函数等待集合达到所需大小。没有保护措施

编辑:“直到集合至少达到指定的大小”

len()
是只读的,所以我不确定线程安全是什么意思。如果集合由不同的线程更新,至少不会使程序崩溃

如果您正在等待一个集合到达N个项目,那么在开始在线程中执行某些操作之前,您可能会得到>N个项目,因为在您开始工作时,可能已经添加了新项目。显然,没有任何保证

另外,如果在第二个线程中从集合中删除内容,则不能保证有N个项目,即使
len()
返回的是N个项目


最后,如果您想发布一个新问题,描述您正试图使用此模式解决的问题,您可能会得到更具建设性的答案。

Safe?是的,应该是。衣冠楚楚的可能不会如果你想让另一个线程在集合累积了精确的项目数后运行,那么它甚至不安全。如果没有,请查看。我认为吉尔在尝试用Python编写线程代码之前必须先读一读。我正在努力寻找一个困难的问题,我在掌握信息,但这里给出的答案足以让人放心,这不是问题。如果我在我的问题中添加了太多的上下文,那么它将被删除。忽略上面的评论。我做了一次编辑澄清,你回答了我的问题。谢谢,我明白了。调试并发程序是困难的。我假设您遇到了某种错误或奇怪的行为,请尝试为您认为应该始终保持的约束添加一些
assert
语句,例如
assert len(my_set)>=N
,或类似的语句。这样,至少您的程序会提前失败,使错误更容易发现。