小编典典

生成器是线程安全的吗?

python

我有一个多线程程序,在其中创建生成器函数,然后将其传递给新线程。我希望它本质上是共享/全局的,以便每个线程都可以从生成器获取下一个值。

使用这样的生成器是否安全?还是会遇到从多个线程访问共享生成器的问题/情况?

如果不是,是否有更好的方法来解决此问题?我需要可以在列表中循环并为任何线程调用它生成下一个值的东西。


阅读 209

收藏
2020-12-20

共1个答案

小编典典

它不是线程安全的;同时调用可能交错,并与局部变量混淆。

常用的方法是使用主从模式(在PC中现在称为“农民工模式”)。创建第三个线程来生成数据,并在主服务器和从服务器之间添加一个队列,从服务器将从队列中读取数据,而主服务器将向该队列中写入数据。标准队列模块提供必要的线程安全性,并安排阻塞主服务器,直到从服务器准备读取更多数据为止。

2020-12-20