Python в Windows отбрасывает UDP-пакеты, а в Ubuntu - нет

Название довольно очевидно, я теряю UDP-пакеты (в python 2.7) в Windows, но в Ubuntu у меня нет этой проблемы. Я использую ПК с двойной загрузкой и одну и ту же сетевую карту на обоих. Что-то еще, что может иметь отношение: я также делаю многопроцессорную обработку в сценарии, когда один процесс только получает пакеты (из микроконтроллера) и сбрасывает их в очередь (queue.put_nowait()). Во всех процессах загрузка ЦП ниже 70%, а в первом - около 10%, общее количество процессов не превышает количество ядер (4, не говоря уже о возможностях гиперпоточности). Вот выдержка из моей рутины приобретения:

import numpy as np
import socket

def get_packet(sock):
    packet, addr = sock.recvfrom(100000) #UDP buffer size
    return packet   

if __name__ == '__main__':
    UDP_IP = "192.168.120.20"
    UDP_PORT = 12345
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.bind((UDP_IP, UDP_PORT)) 

    packet = []
    packet = get_packet(sock)

Затем я закрываю сокет -> sock.close() и запускаю новый процесс (который использует функцию, вызывающую функцию ниже), в которой я повторно объявляю сокет (в противном случае Windows плачет из-за того, как он порождает процессы... http://rhodesmill.org/brandon/2010/python-multiprocessing-linux-windows/):

def put_packets_in_queue(q_packets, dummy1, dummy2):
    UDP_IP = "192.168.120.20"
    UDP_PORT = 12345
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.bind((UDP_IP, UDP_PORT)) 
    while True:
        packet = get_packet(sock)
        #do something with dummy args

Я думал, что проблема может быть вызвана многопроцессорностью, но я думаю, что даже без нее (простой сценарий сбора данных) он по-прежнему отбрасывает их под Windows. Какие-нибудь мысли?

0 ответов

Другие вопросы по тегам