这有点复杂......
基本上,我有这个功能:
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/