这个问题让我脱掉了头发.
如果我做:
def mygen():
for i in range(100):
yield i
Run Code Online (Sandbox Code Playgroud)
并从一千个线程调用它,生成器如何知道每个线程接下来要发送什么?每次我叫它,它的生成保存表与计数器和呼叫方的参考或类似的东西?
有点奇怪.
请澄清我的想法.
小智 6
mygen不必记住任何东西.每次调用都会mygen()返回一个独立的iterable.另一方面,这些迭代具有状态:每次next()调用一次,它会跳转到生成器代码中的正确位置 - 当yield遇到a 时,控制权将被传递给调用者.实际的实现相当混乱,但原则上你可以想象这样的迭代器在字节码(也就是指令指针)中存储局部变量,字节码和当前位置.这里的线程没有什么特别之处.
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |