什么';Python中的udp代码有什么问题?
我希望在多线程情况下,在“192.168.1.114”接收300*3=900条消息,但收到了876条消息。但是,它可以全部通过单个线程到达。它也可以通过发送到“127.0.0.1”到达。 是因为UDP的原因吗什么';Python中的udp代码有什么问题?,python,multithreading,Python,Multithreading,我希望在多线程情况下,在“192.168.1.114”接收300*3=900条消息,但收到了876条消息。但是,它可以全部通过单个线程到达。它也可以通过发送到“127.0.0.1”到达。 是因为UDP的原因吗 import socket import threading from time import sleep s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) host = '192.168.1.114' port = 9999 d
import socket
import threading
from time import sleep
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
host = '192.168.1.114'
port = 9999
def sendMsg(args):
msg = 'thread %06d - 1' % args
s.sendto(msg, (host, port))
sleep(1)
msg = 'thread %06d - 2' % args
s.sendto(msg, (host, port))
sleep(1)
msg = 'thread %06d - 3' % args
s.sendto(msg, (host, port))
threads = []
for i in range(300):
t = threading.Thread(target=sendMsg, args=(i,))
threads.append(t)
t.start()
for j in threads:
j.join()
s.close()
UDP是不可靠的。无法保证数据报会被发送。单个程序中有300个线程有点太多。你说所有消息都是由一个线程发送的说法似乎不正确。如果是这样,那么只有一个线程会发送3条消息;你不会在876到达的。您可以将消息中的线程ID与计数器一起发送,以查看发生了什么。此外,为了解释丢失的邮件,您必须显示您的服务器。当下一条消息到达时,它正在忙于处理信息吗(因为它是UDP,这些信息会被悄悄地丢弃)?线程占用资源,并且您可能已经达到了基于内存量或其他方面的限制。系统日志中有什么内容吗?尝试876/3线程。