0

我有一个集合,我while True在一个线程上循环,而在另一个线程上,我偶尔需要添加或丢弃属于该集合的项目。有什么好的方法可以做到这一点并避免使用 try/except (这种方法会破坏方法的其余部分,并且基本上会导致我的程序出现“故障”)?到目前为止,我所拥有的非常笨拙。这是一个复杂的混乱,我不能轻易粘贴在这里,所以这里是我所做的简要描述。

当需要将新项目添加到字典中时,我会将其添加到临时列表中。然后,我在主迭代结束时检查列表中是否有任何内容,如果有,则完成添加它们的过程。完成后,我将临时列表重新分配给一个空白列表,以接受可能需要添加的新项目。我也对需要删除的项目做同样的事情。所以,再次抱歉没有代码。这真是一团糟。关于如何更好地做到这一点的任何想法?

4

2 回答 2

2

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

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

例如,可以测试队列是满还是空,从而减少在检索项目时使用 try/except 子句的需要。或者,如果需要, Queue'saget()方法将可选地阻塞并可能超时。

抱歉,没有您实际尝试做的示例代码,我无法更具体。

于 2013-03-31T09:47:06.250 回答
0

For set_name = set(),set_name.discard(element)如果元素不存在,则不会引发异常。

编辑:

help(set.discard)

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

    If the element is not a member, do nothing.
于 2013-03-30T05:46:26.073 回答