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

标签 python generator

这个问题让我抓狂。

如果我这样做:

def mygen():
    for i in range(100):
        yield i

并从一千个线程中调用它,生成器如何知道每个线程接下来要发送什么?

每次我调用它时,生成器是否会保存一个包含计数器和调用者引用或类似内容的表?

这很奇怪。

请澄清一下我的想法。

最佳答案

mygen 不需要记住任何东西。每次调用 mygen() 都会返回一个独立的可迭代对象。另一方面,这些可迭代对象具有状态:每次 next() 被调用时,它会跳转到生成器代码中的正确位置——当 yield遇到,控制权交还给调用者。实际实现起来比较困惑,但原则上你可以想象这样一个迭代器存储局部变量、字节码和字节码中的当前位置(也称为指令指针)。这里的线程没有什么特别之处。

关于python - Python 生成器如何知道谁在调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16389062/

相关文章:

python - Django + fcgi = 未显示对 views.py 的新编辑

第一个参数是 class 或 self 的 Python 方法

python - 在 python 函数调用的参数列表中嵌套生成器表达式

python - 在一行中使用generator.send()消耗多个项目

javascript - 什么是迭代器/生成器/可迭代器? (Javascript)

python - Django 模板不显示我的所有参数

python - 在 python 中使用 h5py 调整数据集大小并以 .h5 格式存储数据集

python - 使用 django 模板将 json 填充为 html

python - 如何从生成器构建 numpy 数组?

Python 从生成器到列表