簡體   English   中英

檢查Infinite Loop是否仍在Python3中運行的過程

[英]A Process to check if Infinite Loop is still running in Python3

在以下情況下,我通常無法借助編程概念來掌握這一點:

注意:在這種情況下,所有數據傳輸都是使用Python3的 socket模塊通過UDP數據包完成的

  • 我有一個服務器 ,它發送一定量的數據,假設通過WiFi通道發送了300個數據包

  • 在另一端,我有一個接收器,它在特定的解碼過程中對數據進行解碼。 這種解碼過程是一個無限循環,它在每次迭代中都返回布爾值truefalse ,具體取決於某些方面,這些方面到目前為止可以忽略不計。

一個粗糙的代碼片段如下: Python3

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()函數,如果時間到期並且輸出仍然為False那么我可以通過套接字使用struct.pack()向服務器發送一種反饋

當然,網絡的邏輯, 不必以現在得到解決。 但是python是否能夠通過並行線程或其他編程概念監視此無限循環

注意事項

不幸的是,有問題的接收器是啞接收器,即未指定用戶控件。 Receiver唯一能做的就是解碼數據,並可能向服務器發送一個反饋 ,指出是否接收到數據,並且只有在上述LOOP完成時才有可能。

這里有什么可能的解決方案? (很樂意根據要求分享更多信息)

是的,您可以這樣做。 大致如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM