itertools线程安全吗?

问题描述 投票:16回答:2

例如,如果我使用chain创建一个迭代器,是否可以在多个线程上调用它?请注意,依赖于GIL的线程安全性是可以接受的,但不是可取的。

((请注意,这与chain有点不同,后者处理生成器,而不是用C编写的迭代器。

python thread-safety itertools
2个回答
15
投票

首先,this question中没有任何内容表明它们是线程安全的。因此,按照规范,Python似乎对此不做任何保证。在Jython或PyPy等实现中,这可能会有所不同,但这意味着您的代码可能不会移植。

[其次,大多数official documentation on itertools(简单的例外,例如itertools)都将其他迭代器作为其输入。您需要这些迭代器也以线程安全的方式正确运行。

第三,某些迭代器在不同线程同时使用时可能没有意义。例如,在多个线程中工作的count可能会进入竞争状态,从而从多个来源获取元素,尤其是由等效的python代码定义的情况(当一个线程仅设法从一个输入迭代器获取值,然后从两个迭代器获取第二个值时,会发生什么情况?其中?)。>

[另请注意,文档中没有提到izip是用C实现的。我们知道(作为实现细节)CPython的itertools实际上是用C编写的,但在其他实现上,它们可以很高兴地实现为生成器,然后您可以返回itertools

因此,不,除非您了解目标python平台的实现细节,否则不能假定它们是线程安全的。


0
投票

当前的实现似乎是原子的

© www.soinside.com 2019 - 2024. All rights reserved.