Python生成器如何知道谁在调用?

Pat*_*sut 6 python generator

这个问题让我脱掉了头发.

如果我做:

def mygen():
    for i in range(100):
        yield i
Run Code Online (Sandbox Code Playgroud)

并从一千个线程调用它,生成器如何知道每个线程接下来要发送什么?每次我叫它,它的生成保存表与计数器和呼叫方的参考或类似的东西?

有点奇怪.

请澄清我的想法.

小智 6

mygen不必记住任何东西.每次调用都会mygen()返回一个独立的iterable.另一方面,这些迭代具有状态:每次next()调用一次,它会跳转到生成器代码中的正确位置 - 当yield遇到a 时,控制权将被传递给调用者.实际的实现相当混乱,但原则上你可以想象这样的迭代器在字节码(也就是指令指针)中存储局部变量,字节码和当前位置.这里的线程没有什么特别之处.