在一般的编程概念的帮助下,我无法掌握以下情况:
注意:此方案中的所有数据传输均使用 Python3 的<{1}}模块通过UDP数据包完成
我有一个服务器,它会发送一定数量的数据,通过WiFi频道假设 300个数据包
在另一端,我有一个接收器,它可以处理某个解码过程来解码数据。这个解码过程是一种无限循环,它在每次迭代时返回布尔值socket
或true
,具体取决于现在可以忽略的某些方面
Rough Code Snippet如下: Python3
false
由于服务器和客户端接近并且数据可以被解码,所以当下所有事情都有效。但在实际情况中,我想检查上面提到的循环。例如,经过一段时间后,如果上述循环仍处于 Forever(Infinite)状态,我想向服务器发送一些内容,以便再次启动数据发送。
我对多线程概念不是很清楚,但在这种情况下我可以在这里使用一个线程吗?
例如:
incomingPacket = next(bringNextFromBuffer)
if decoder.consume_data(incomingPacket):
# this if condition is inside an infinite loop
# unless the if condition becomes True keep
# keep consuming data in a forever for loop
print("Data has been received")
函数,如果时间到期且输出仍为decoder.consume_data()
,我可以发送一种反馈< / strong>使用False
套接字向服务器发送。当然,网络逻辑需要 NOT 来解决。但是python是否能够通过并行线程或其他编程概念来监控这个无限循环?
不幸的是,有问题的接收器是一个愚蠢的接收器,即没有指定用户控制。 Receiver唯一能做的就是对数据进行解码,然后向服务器发送反馈,说明是否收到了数据,只有当上面提到的 LOOP 时才有可能完成。
这里有什么可能的解决方案? (很乐意根据要求分享更多信息)
答案 0 :(得分:0)
是的,你可以这样做。大致它看起来像这样:
from threading import Thread
from time import sleep
state = 'running'
def monitor():
while True:
if state == 'running':
tell_client()
sleep(1) # to prevent too much happening here
Thread(target=monitor).start()
while state == 'running':
receive_data()