在Python中,是集合.pop()线程安全?

2024-10-17 08:25:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道python中的内置集类型通常不是线程安全的,但是thisanswer声称从两个竞争线程调用pop()是安全的。当然,您可能会得到一个异常,但您的数据没有损坏。我似乎找不到一个证明这一说法的文件。是真的吗?请出示文件!在


Tags: 文件数据证明类型线程pop内置声称
2条回答

我相信设置“pop”操作是线程安全的,因为它是原子的,从某种意义上说,两个线程不能弹出相同的值。在

例如,如果另一个线程正在迭代该集合,我就不会依赖它的行为。在

我也找不到任何具体的文档,只有一些指向这个方向的主题。Python的官方文档确实会受益于这类信息。在

如果你看一下^{} method in the CPython source,你会发现它没有释放GIL。在

这意味着在CPython进程中一次只能发生一个set.pop。在

因为^{} checks if the set is empty,你只能通过尝试从一个空的集合中弹出来引起IndexError。在

所以不,不能通过使用CPython从多个线程中弹出一个集合来破坏数据。在

相关问题 更多 >