[英]A Process to check if Infinite Loop is still running in Python3
在以下情況下,我通常無法借助編程概念來掌握這一點:
注意:在這種情況下,所有數據傳輸都是使用Python3的 socket
模塊通過UDP數據包完成的
我有一個服務器 ,它發送一定量的數據,假設通過WiFi通道發送了300個數據包
在另一端,我有一個接收器,它在特定的解碼過程中對數據進行解碼。 這種解碼過程是一個無限循環,它在每次迭代中都返回布爾值true
或false
,具體取決於某些方面,這些方面到目前為止可以忽略不計。
一個粗糙的代碼片段如下: 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.