用python接收高速率的UDP数据包

2023-12-09

我正在使用 python 来从 FPGA 接收 UDP 数据包流,并尝试丢失尽可能少的数据包。 数据包速率从大约 5kHz 到一些 MHz,我们希望在特定时间窗口(代码中的 acq_time)内获取数据。 我们现在有这样的代码:

BUFSIZE=4096
dataSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
dataSock.settimeout(0.1)
dataSock.bind((self.HOST_IP, self.HOST_PORT))
time0=time.time()
data_list = []
while time.time()-time0<acq_time:
     fast_acquisition(data_list)

def fast_acquisition(data_list_tmp):
    data, addr = dataSock.recvfrom(self.BUFSIZE)
    data_list_tmp.append(data) 
    return len(data)

获取后,我们将 data_list 保存在磁盘上。

这段代码的目的是尽可能简单和快速,但它仍然太慢,即使在 5kHz 下我们也会丢失太多数据包,我们认为发生这种情况是因为当我们读取一个数据包并将其存储在列表中并检查时间时,下一个(矿石)到达并丢失。 有什么办法让套接字保持打开状态吗?我们是否可以通过并行处理“串联”打开多个套接字,以便当我们保存第一个套接字的文件时,第二个套接字可以接收另一个数据包? 我们甚至可以考虑使用另一种语言,仅用于接收数据包并将其存储在磁盘上。


你可以使用tcpdump (这是用C实现的)来捕获 UDP 流量,因为它比python:

#!/bin/bash

iface=$1 # interface, 1st arg
port=$2  # port, 2nd arg

tcpdump -i $iface -G acq_time_in_seconds -n udp port $port -w traffic.pcap

然后你可以使用例如scapy处理该流量

#!/usr/bin/env python

from scapy.all import *

scapy_cap = rdpcap('traffic.pcap')
for packet in scapy_cap:
    # process packets...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用python接收高速率的UDP数据包 的相关文章

  • 如何证明2条sql语句是等价的

    我开始用连接和子语句重写一个复杂的 SQL 语句 并获得一个看起来更简单的语句 我通过在相同的数据集上运行并获得相同的结果集来测试它 一般来说 我如何 概念上 证明这两个陈述在任何给定数据集中都是相同的 我建议学习关系代数 正如 Mchl
  • Python daysBetweenDate

    我想我可能有一个无限循环 因为每当我运行代码时 我都会收到一条错误消息 它说 程序因使用 13 CPU 秒而关闭 整个代码 应该以日期作为输入并输出第二天 此代码假设所有月份都是 30 天 除了daysBetweenDates功能正常 其他
  • 在 Linux 上创建线程与进程的开销

    我试图回答在 python 中创建线程与进程有多少开销的问题 我修改了类似问题的代码 该问题基本上运行一个带有两个线程的函数 然后运行带有两个进程的相同函数并报告时间 import time sys NUM RANGE 100000000
  • TypeError:无法在 re.findall() 中的类似字节的对象上使用字符串模式

    我正在尝试学习如何自动从页面获取网址 在下面的代码中 我试图获取网页的标题 import urllib request import re url http www google com regex r pattern re compile
  • PyPDF2 复制后返回空白 PDF

    def EncryptPDFFiles password directory pdfFiles success 0 Get all PDF files from a directory for folderName subFolders f
  • 使用 Pandas 解析时避免 Excel 的科学记数法舍入

    我有一个自动生成的 Excel 文件 其中偶尔包含非常大的数字 例如135061808695 在 Excel 文件中 当您单击单元格时 它会显示完整的数字135061808695然而 在视觉上 使用自动 常规 格式 数字显示为1 35063
  • Boost Python:多态容器?

    我有一个方法 或函数 它返回对多态对象列表的引用 class A class B public A std list
  • 为什么在 CSS3 中启用硬件加速会降低性能?

    我在 css3 实验中将 10 000 个小 div 元素从浏览器视口的顶部移动到底部 对于此测试 我使用两种不同的方法 使用 GPU 加速translate3D x y z or translateZ 0 无需 GPU 加速 只需调整to
  • 加速 Numpy 数组上的循环

    在我的代码中 我有一个 for 循环 它对多维 numpy 数组进行索引 并使用每次迭代时获得的子数组进行一些操作 看起来像这样 for sub in Arr do stuff using sub 现在使用完成的东西sub是完全矢量化的 所
  • Android 7 GraphicBuffer 替代方案,用于直接访问 OpenGL 纹理内存

    从移动设备具有 CPU 和 GPU 共享内存这一事实中获利的唯一方法是使用GrphicBuffer 但由于 Android 7 限制对私有本机库 包括 gralloc 的访问 因此无法再使用它 问题 是否有其他方法可以直接内存访问纹理的像素
  • Python 字典不按顺序排列

    我创建了一个字母表字典 其值从0开始 并根据单词文件增加一定的量 我对最初的字典进行了硬编码 我希望它保持按字母顺序排列 但事实并非如此 我希望它按字母顺序返回字典 基本上与初始字典保持相同 我怎样才能保持秩序 from wordData
  • Python OO程序结构规划

    我是 OOP 的初学者 我想创建一个包含三个类 A B 和 C 的程序 该类的每个实例都由一组特征 Achar1 Achar2 等定义 该程序应该创建uses由 A 元素 B 元素和 C 元素以及开始日期和结束日期组成 A 和 B 都有子类
  • Django 视图中的原始 SQL 查询

    我将如何使用原始 SQL 执行以下操作views py from app models import Picture def results request all Picture objects all yes Picture objec
  • 在 pandas 中展开列表列时,是否有一种Python式的方法来添加枚举列?

    考虑以下DataFrame gt gt gt df pd DataFrame A 1 2 3 B abc def ghi apply A int B list gt gt gt df A B 0 1 a b c 1 2 d e f 2 3
  • 树莓派上的 /dev/mem 访问被拒绝

    我正在使用我的 Raspberry Pi 并且正在编写一个 cgi python 脚本 该脚本创建一个网页来控制我的 gpio 输出引脚 当我尝试将 RPi GPIO 作为 GPIO 导入时 我的脚本崩溃了 这是我收到的错误 File co
  • 在Python中寻找坐标系中某些点之间的最短路径

    我编写了一个代码 可以在坐标系中的特定宽度和长度范围内生成所需数量的点 它计算并列出我使用欧几里德方法生成的这些点的距离矩阵 我的代码在这里 import pandas as pd from scipy spatial import dis
  • 使用 South 更改 Django 模型列默认值

    我在 Django 项目中使用 South 和 Postgresql DB 我想更改一个模型字段的默认值以供继续使用 我不需要以前的记录 刚刚新记录 我是否需要为此进行迁移 或者只是更改模型 旧场详细信息 background style
  • API 调用时出现 UnicodeEncodeError (json)

    我正在尝试打印此 API 调用的结果 但收到 UnicodeEncodeError 可能是超级菜鸟问题 但非常感谢任何帮助 import http client import json api key hidden connection h
  • 为什么 `Pool.map()` 多处理中的内存消耗急剧增加?

    我正在对 pandas 数据帧进行多重处理 方法是将其拆分为多个数据帧 这些数据帧存储为列表 并且 使用Pool map 我将数据帧传递给定义的函数 我的输入文件约为 300 mb 因此小数据帧大约为 75 mb 但是 当多处理运行时 内存
  • 如何使用 google.oauth2 python 库?

    我试图对谷歌机器学习项目的安全预测端点进行简单的休息调用 但它找不到 google oauth2 模块 这是我的代码 import urllib2 from google oauth2 import service account Cons

随机推荐