Я читаю данные журнала из csv в pandas, часть данных - данные полезной нагрузки UDP, которые я передаю в пользовательский класс пакетов Scapy, экземпляры объекта scapy затем сохраняются в столбце во фрейме данных pandas, который я позжедалее процесс конвейера.
Это прекрасно работает, когда я запускаю однопотоковый / однопоточный или многопоточный процесс, но всякий раз, когда я пытаюсь использовать многопроцессорную обработку или многопроцессорную обработку через DASK, она сразу завершается с ошибкой:
File "C:\miniconda3\envs\py37\lib\site-packages\scapy\packet.py", line 825, in do_dissect
s = bytes_encode(s)
File "C:\miniconda3\envs\py37\lib\site-packages\scapy\compat.py", line 60, in bytes_encode
return bytes(x)
TypeError: 'bytes' object cannot be interpreted as an integer
Кто-нибудь с подобной проблемой и / или предложениями по ее решению?
Пользовательский класс пакетов scapy очень прост и имеет только поля типа BitField.
Я работаю: windows 10python 3.7.5 scapy 2.4.3
ОБНОВЛЕНИЕ: Попытка создать небольшой воспроизводимый пример после запроса в комментариях:
В пользовательском пакете scapy использовался мультиплексор, этот мультиплексорBitField был случайно установлен на длину 2, когда он должен был быть только 1.
Между мультиплексором и следующим полемВместо этого ds должен был быть пробел в 1 бит.
Два следующих поля, где условные битовые поля основаны на мультиплексоре
Мультиплексор сделал, из-за этого в некоторых выборках данных получают значение> 1,не вызывая добавление ни одного из двух условных полей. По какой-то причине это вызвало ранее описанную ошибку при запуске многопроцессорной обработки.
fields_desc = [
scapy.BitField("multiplexor", 0, 2),
#scapy.BitField("gap", 0, 1),
scapy.ConditionalField(scapy.BitField("A20", 0, 10), lambda p: p.multiplexor == 0),
scapy.ConditionalField(scapy.BitField("A20_X", 0, 10), lambda p: p.multiplexor == 1),
scapy.BitField("A21",0, 10)]