gpt4 book ai didi

python - UDP 服务器帧间隙

转载 作者:太空宇宙 更新时间:2023-11-04 06:19:48 25 4
gpt4 key购买 nike

我是 python 的新手,想在这里获得一些帮助。我写了一个代码来通过套接字传输 UDP 数据。我想每 50 微秒循环重新传输一次数据,但我只能每 3 秒发送一次!我确定我做错了什么,你能帮帮我吗?我粘贴了下面的代码:

import socket,codecs,binascii,re ,sched, time

UDP_IP = "XXX.XXX.XXX.XXX"

UDP_PORT = 30001
MESSAGE = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\
x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20'# !"#$%' #"\x00\x01\x02 "


s = sched.scheduler(time.time, time.sleep)

def send_data(sc):

sock = socket.socket(socket.AF_INET, # Internet

socket.SOCK_DGRAM) # UDP

sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))



print""
print""
print""
print""
print""
sc.enter(0.000050, 1, send_data, (sc,))
print time.time()
print""
print""

s.enter(0.0000050, 1, send_data, (s,))
s.run()

最佳答案

首先,每次发送数据时都创建一个新套接字会产生相当大的开销。一遍又一遍地安排一个新任务也会增加很多开销,进一步减慢你的程序。打印命令会增加一些开销,尤其是当您输出大量数据时。

其他需要考虑的事情包括所涉及的系统计时器的精度、与硬件的交互、python 是一种解释性语言等,但相比之下它们都是次要的,因此您可以忽略这些。如果你想写一些实时关键的东西,C 会是更好的选择。

所以无论如何,为了加快你的程序,我会去掉耗时的部分:

import socket, time
# ...
def send_data():
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while True: #TODO: would require an abort condition
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))
time.sleep(0.00005) # don't count on this to be 100% accurate

如果你不想让你的主程序阻塞,你可以把它放到一个线程中:

from threading import Thread
t = Thread(target=send_data)
t.start()

关于python - UDP 服务器帧间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13198700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com