这个问题让我抓狂。
如果我这样做:
def mygen():
for i in range(100):
yield i
并从一千个线程中调用它,生成器如何知道每个线程接下来要发送什么?
每次我调用它时,生成器是否会保存一个包含计数器和调用者引用或类似内容的表?
这很奇怪。
请澄清一下我的想法。
最佳答案
mygen
不需要记住任何东西。每次调用 mygen()
都会返回一个独立的可迭代对象。另一方面,这些可迭代对象具有状态:每次 next()
被调用时,它会跳转到生成器代码中的正确位置——当 yield
遇到,控制权交还给调用者。实际实现起来比较困惑,但原则上你可以想象这样一个迭代器存储局部变量、字节码和字节码中的当前位置(也称为指令指针)。这里的线程没有什么特别之处。
关于python - Python 生成器如何知道谁在调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16389062/