Я написал следующий код отправки / получения UDP.
Код для отправки каждую секунду (udpSend.py) и код для ожидания каждую секунду (udpRecv.py).
Первый Я установил значение времени ожидания в udpRecv.py на 0,1, затем изменил значение времени ожидания на 5 и попытался.
udpSend.py
import time
import threading
from socket import socket, AF_INET, SOCK_DGRAM
HOST = ''
PORT = 5000
ADDRESS = "127.0.0.1"
s = socket(AF_INET, SOCK_DGRAM)
startTime = time.time()
def worker():
try:
msg = str(time.time()-startTime)
print(msg)
s.sendto(msg.encode(), (ADDRESS, PORT))
time.sleep(8)
except:
pass
def scheduler(interval, f, wait = True):
base_time = time.time()
next_time = 0
while True:
t = threading.Thread(target = f)
t.start()
if wait:
t.join()
next_time = ((base_time - time.time()) % interval) or interval
time.sleep(next_time)
scheduler(1, worker, False)
udpRecv.py
import time
import threading
from socket import socket, AF_INET, SOCK_DGRAM
HOST = ''
PORT = 5000
s = socket(AF_INET, SOCK_DGRAM)
s.bind((HOST, PORT))
s.settimeout(0.1)
def worker():
try:
msg, address = s.recvfrom(8192)
print(msg.decode('utf-8'))
time.sleep(8)
except:
pass
def scheduler(interval, f, wait = True):
base_time = time.time()
next_time = 0
while True:
t = threading.Thread(target = f)
t.start()
if wait:
t.join()
next_time = ((base_time - time.time()) % interval) or interval
time.sleep(next_time)
scheduler(1, worker, False)
Затем был получен следующий вывод.
** Когда значение тайм-аута = 0,1 ** (выход слева - отправитель, выход справа - получатель)
** Когда значение тайм-аута = 5 ** (выход слева - отправитель, выход справа - приемник)
На изображении выше, когда значение тайм-аута равно 0,1, задержка составляет почти 1 секунду, тогда как когда значение тайм-аута равно 5, оно выглядит почти как нет задержки. Как это вызывает задержку?
В этом случае увеличение значения тайм-аута дает желаемый результат. Однако я думаю, что не всегда необходимо увеличивать значение тайм-аута. Когда мне следует увеличивать или уменьшать значение тайм-аута?
Есть ли способ уменьшить задержку при сохранении значения тайм-аута на уровне 0,1?