Python 在迭代和线程期间设置更改的大小

Python 在迭代和线程期间设置更改的大小,python,python-2.x,Python,Python 2.x,在一个线程上循环时,我得到了一个集合,而在另一个线程上,我偶尔需要添加或丢弃属于该集合的项目。这样做并避免使用try/except的好方法是什么?该方法会中断该方法的其余部分,并从本质上导致程序出现“故障”?到目前为止,我所知道的是相当令人讨厌的。这是一个复杂的混乱,我不能轻易地粘贴在这里,所以这里有一个我所做的简要说明 当一个新项目需要添加到字典中时,我会将该项目添加到一个临时列表中。然后,在我的主要迭代结束时,我会进行一次检查,看看列表中是否有任何内容,如果有,我会完成添加这些内容的过程。完

在一个线程上循环时,我得到了一个集合,而在另一个线程上,我偶尔需要添加或丢弃属于该集合的项目。这样做并避免使用try/except的好方法是什么?该方法会中断该方法的其余部分,并从本质上导致程序出现“故障”?到目前为止,我所知道的是相当令人讨厌的。这是一个复杂的混乱,我不能轻易地粘贴在这里,所以这里有一个我所做的简要说明

当一个新项目需要添加到字典中时,我会将该项目添加到一个临时列表中。然后,在我的主要迭代结束时,我会进行一次检查,看看列表中是否有任何内容,如果有,我会完成添加这些内容的过程。完成后,我将临时列表重新分配给一个空白列表,以接受可能需要添加的新项目。对于需要移除的项目,我也会这样做。所以,再次抱歉,没有代码。真是一团糟。关于如何做得更好,您有什么想法吗?

对于set\u name=set,如果元素不存在,set\u name.discard元素不会引发异常

编辑:


正如我在我的评论中提到的,考虑使用模块的队列类的实例来在程序中运行的不同线程之间传递信息。该模块实现了几种队列,因此您可以选择最适合您所做工作的队列,并同步对它们的访问

Queue类是为多线程编程而设计的,因此它的方法会自动为您处理所有必需的锁定细节,从而防止同时访问问题,我想这正是您在问题中所描述的

例如,可以测试队列是满的还是空的,这样在检索项目时就不需要使用try/except子句了。或者,如果需要,队列的a get方法将选择性地阻塞并可能超时


很抱歉,没有您实际尝试执行的操作的示例代码,我无法更具体地说明。

创建一个threading.Lock对象并使用它控制对集合的访问。我只是查找了有关锁定的文档。为此设置队列的好方法是什么?如果我锁定线程,那么当程序尝试删除对象时,它将失败。一旦线程被释放,所有需要移除的对象仍然需要被移除。我喜欢这个想法,只是对排队不太确定。你不锁定线程,而是锁定共享资源以防止同时访问产生问题,在本例中,这就是你的列表。但是,既然您现在谈论的是队列,我建议您使用内置类,该类专为在多个线程之间安全地交换信息而设计,换句话说,它可以为您执行任何需要的锁定。为什么您不直接访问dict?dict['item']=要添加的值,del dict['item']要删除。@jtsmith1287:具体来说,请查看用于删除对象的方法及其变体。
help(set.discard)

discard(...)
    Remove an element from a set if it is a member.

    If the element is not a member, do nothing.