Python &引用;“收益率”;制动while循环磨合线程
我有两个独立的函数,都使用套接字与服务器通信。一个仅用于保持收集活动,另一个用于收集接收到的数据 e、 g 我在穿线的同时运行它们,一切正常Python &引用;“收益率”;制动while循环磨合线程,python,multithreading,yield,Python,Multithreading,Yield,我有两个独立的函数,都使用套接字与服务器通信。一个仅用于保持收集活动,另一个用于收集接收到的数据 e、 g 我在穿线的同时运行它们,一切正常 t_1 = threading.Thread(target=data_colector) t_2 = threading.Thread(target=keep_connection) t_1.start() t_2.start() 然而,当我将print in data_collector()更改为yield时,它根本不起作用 def data_cole
t_1 = threading.Thread(target=data_colector)
t_2 = threading.Thread(target=keep_connection)
t_1.start()
t_2.start()
然而,当我将print in data_collector()更改为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_collector()的线程似乎没有启动
这是正常行为吗?如何使data_collector()产生变量?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
您能否显示使用
数据收集器()的代码?如果只调用一次,则只会得到1组变量,因为yield就是这样做的。稍微改写一下@Loocid所说的,您的while
循环会产生无限次,但总是产生相同的值。你认为收益率是什么?也许这就是问题所在。您不需要显示完整的代码,但需要显示足够的代码来重现问题。@WiktorKisielewski了解yield的作用,我认为您误解了它的工作原理。将代码更改为使用yield
会使data\u collector
函数返回一个生成器,而不是任何实际值。函数中的实际代码永远不会被调用,除非您在生成器上迭代返回的函数。因为我们只看到函数,而不知道如何使用返回的生成器,所以我们无法确定出了什么问题。
0
1
2