什么';Python中的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

我希望在多线程情况下,在“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

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线程。