python - Python UDP套接字,未知延迟

标签 python sockets udp real-time delay

我每隔1毫秒使用UDP套接字从实时应用程序向python实例发送32字节数据。发送方配置为发送1ms时间分辨率UDP数据包。在接收端,每隔几次迭代,我就有15或16毫秒的延迟。任何人都可以帮助我理解为什么吗?
使用Windows虚拟机。 Intel Xeon Gold 5120 2核心CPU,2.20 GHz,6 GB RAM,配备Windows 10 Pro操作系统。

## Import necessary libraries

import socket
import time
"""
just get the raw values from UDP socket every 1ms
The sender sends it with that temporal resolution

"""

UDP_IP = "10.10.114.22"
UDP_PORT = 8208 #UDP phasor values 32 bytes (V,phi,P)
sock_ph = socket.socket(socket.AF_INET,  # Internet
                     socket.SOCK_DGRAM)  # UDP
sock_ph.bind((UDP_IP, UDP_PORT))
print("socket bound, waiting for data...")

while True:
    time_before_raw = time.monotonic_ns()
    raw = sock_ph.recv(32) #I am receiving 32 bytes data
    time_after_raw = time.monotonic_ns()
    print((time_after_raw-time_before_raw),raw,len(raw))
打印输出如下:
Output showing unknown delay
我尝试过wireshark,可以看到数据包以1ms的间隔到达。因此,基本上,python套接字可能存在一些缓冲问题。
Wireshark screenshot, showing 1ms temporal resolution of data
经过进一步调查,可以发现python环境中几乎同时发出了14-16个UDP数据包(它们之间的延迟为0毫秒),然后在14-16ms之后又出现了下一批数据包。好像有某种缓冲区。

最佳答案

延迟是由于monotonic_ns()的时间分辨率所致,time.perf_counter_ns()解决了此问题。
https://www.python.org/dev/peps/pep-0564/#id23

关于python - Python UDP套接字,未知延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63632159/

相关文章:

go - 如何在服务器的GoLang CoAP中编写服务端点PUT请求方法?

java - DatagramSocket能否接收多播数据包

python - Django:重写 get_queryset() 时如何注入(inject)数据?

python - gpxpy : How to extract heart rate data from gpx file

python - 亚马逊s3图片上传中PUT http请求403错误

java - 使用 Java 检测另一台设备上的端口是否打开

php - PHP的最大套接字数stream_socket_client

java - Android 上丢失 UDP 套接字数据包

Python 原始 udp 数据包未到达 udp 监听器

python - 如何在 pandas 数据框中使用 groupby 来获取以下数据的平均值?