python - 数组更改后立即跳出循环

标签 python loops for-loop python-requests

这有点复杂......

基本上,我有这个功能:

def do_loop(self):
    for line in self.connections[0].iter_lines():
            print line

并且,有一个线程不断地与它一起运行,它将在任意时间更改connections[0]的值。

如果发生这种情况,如果线程从外部更改了connections[0],则循环将继续使用旧的connections[0],我需要这样做发生这种情况时,我需要它立即使用新的 connections[0]

对于一些背景,for line in self.connections[0].iter_lines(): 正在使用 python-requests 从 Twitter Streaming API 读取数据,因此 .iter_lines().

有什么想法吗?提前致谢。

最佳答案

for 循环将创建一个迭代器,一次,并且它不会在循环中继续检查 self.connections[0]。正如 @mklauber 所说,使用类似 threading.Event 的东西。

假设我们有一个 threading.Event 实例作为 self.new_conn 并且每当有新连接时它就会被设置:

def do_loop(self):
    for line in self.connections[0].iter_lines():
        if self.new_conn.is_set():
            break # or could raise exception here
        print line

如果您只需要立即终止循环,您可以通过将 .iter_lines() 方法设置为生成器来处理它,并让生成器执行检查:

def iter_lines(self):
    for line in self.connections[0].private_data_lines:
        if self.new_conn.is_set():
            break
        yield line

这很好地封装了循环。您的原始代码将按所示方式工作,并且当有新连接时它将停止。

关于python - 数组更改后立即跳出循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10198530/

相关文章:

javascript - 遍历 json 数据并匹配到一个数组

c - 为什么在 C 语言的嵌套 for 循环中 scanf() 被跳过?

c - 如何将元素从数组移动到 C 中的变量中

bash - 使用 curl 循环访问 url 的 Shell 脚本

python - 如何检查表中是否存在列,如果不存在则不插入

python - `pyyaml` 可以 't parse ` pydantic ` object if ` Typing` 模块被使用

python - 无法让 wx.BufferedDC 绘制任何东西

loops - 将值添加到匹配谓词的第一个列表(列表)

javascript - 在 ng-repeat 中生成 ng-model

python - 在 matplotlib 用户界面中更新颜色条而不重置缩放历史记录