检查无限循环是否仍在Python3中运行的过程

时间:2016-05-10 19:54:43

标签: python multithreading python-3.x networking

在一般的编程概念的帮助下,我无法掌握以下情况:

注意:此方案中的所有数据传输均使用 Python3 的<{1}}模块通过UDP数据包完成

  • 我有一个服务器,它会发送一定数量的数据,通过WiFi频道假设 300个数据包

  • 在另一端,我有一个接收器,它可以处理某个解码过程来解码数据。这个解码过程是一种无限循环,它在每次迭代时返回布尔值sockettrue,具体取决于现在可以忽略的某些方面

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 时才有可能完成。

这里有什么可能的解决方案? (很乐意根据要求分享更多信息)

1 个答案:

答案 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()