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. Какие-нибудь мысли?