我有两个独立的功能,都使用套接字与服务器通信。一个仅用于保持收集活动状态,而另一个收集收集的数据。
例如
def keep_connection():
while True:
#keeps connection by sending signal to the server
time.sleep(30)
def data_colector():
while True:
out = str(s.recv(auth_file.SocketConnectPort)
var_index = out.find('269=0')
var_1 = (((out[var_index + 13:var_index + 20]).replace('.', '')).replace('\\', '')).replace('x', '')
...
print(var_1, var_2, var_3)
我与threading同时运行它们,并且一切正常,
t_1 = threading.Thread(target=data_colector)
t_2 = threading.Thread(target=keep_connection)
t_1.start()
t_2.start()
但是,当我将data_colector()中的print更改为yield时,它根本不起作用。
def data_colector():
print('confirm thread started')
while True:
#collects data received and converts it into few variables
yield var_1, var_2, var_3
没有错误返回,并且似乎运行data_colector()的thread甚至没有凝视。
这是正常行为,如何使data_colector()yield变量?
Yield是与return一样使用的关键字,除了该函数将返回生成器。
def data_colector():
print('confirm thread started')
# collects data received and converts it into few variables
for (var_1, var_2, var_3) in some_object:
yield var_1, var_2, var_3
for a, b, c in data_colector()
print(a, b, c)
因此,您必须使用循环来调用生成器。我有一个简单的例子:
def func():
for i in range(3):
yield i
a = func()
for i in a:
print(i)
输出为:
0
1
2