Python 值对于定义的数据类型太大
我正在从一个特殊设备读取数据,该设备的速度大约为20 MB/sPython 值对于定义的数据类型太大,python,linux,Python,Linux,我正在从一个特殊设备读取数据,该设备的速度大约为20 MB/s /dev/dvb/adapter0/dvr0 我需要阅读内容并复制到其他FIFO device_fd = os.open(video_device_file, os.O_RDONLY) while True: if jobm.has_jobs(): chunk = os.read( device_fd, 1024 * 1000 ) fifom.wri
/dev/dvb/adapter0/dvr0
我需要阅读内容并复制到其他FIFO
device_fd = os.open(video_device_file, os.O_RDONLY)
while True:
if jobm.has_jobs():
chunk = os.read( device_fd, 1024 * 1000 )
fifom.write2all(chunk)
jobm.idle()
在运行了一整晚之后,我收到了以下错误:
[Errno 75]值对于定义的数据类型太大
在os.read行中
从谷歌看来,这似乎与c库和32位指针有关,但我看不出这会如何影响我的64位python版本
有什么建议吗?我不知道你的
jobm
对象是什么,我假设它是你创建的,因为这是类似对象的唯一谷歌结果,如果我错了,请纠正我
您似乎正在打开视频设备进行读取,视频设备不断生成视频数据,而不是读取它,您处于空闲状态。您似乎没有将设备\u fd
发送到您的jobm东西,因此它无法知道fd上是否有活动,因此它在您应该读取时处于休眠状态,这会造成缓冲区溢出
如果有可用的数据,您需要始终从设备读取数据。将fd发送到jobm,并使其利用poll
或select
查找其上的活动
编辑:对不起,我遗漏了你问题中的一个细节。我所说的仍然适用,但不是那么直接——你需要观察你的输入和输出,而不仅仅是你的输出,因为我已经说过了
如果FIFO无法处理输出,导致设备上的读数丢失,则会出现问题。您需要1)创建一个可容纳数百MB数据的缓冲区,以防管道写入延迟;2)丢弃数据包。如果某些数据丢失,DVB应用程序应该处理它。您也可以简单地捕获并忽略异常,尽管它会导致轻微的损坏和输出中的数据丢失。我不知道您的
jobm
对象是什么,我假设它是由您创建的,因为这是类似对象的唯一谷歌结果,如果我错了,请纠正我
您似乎正在打开视频设备进行读取,视频设备不断生成视频数据,而不是读取它,您处于空闲状态。您似乎没有将设备\u fd
发送到您的jobm东西,因此它无法知道fd上是否有活动,因此它在您应该读取时处于休眠状态,这会造成缓冲区溢出
如果有可用的数据,您需要始终从设备读取数据。将fd发送到jobm,并使其利用poll
或select
查找其上的活动
编辑:对不起,我遗漏了你问题中的一个细节。我所说的仍然适用,但不是那么直接——你需要观察你的输入和输出,而不仅仅是你的输出,因为我已经说过了
如果FIFO无法处理输出,导致设备上的读数丢失,则会出现问题。您需要1)创建一个可容纳数百MB数据的缓冲区,以防管道写入延迟;2)丢弃数据包。如果某些数据丢失,DVB应用程序应该处理它。您也可以简单地捕获并忽略异常,尽管它会导致轻微的损坏和输出中的数据丢失。您的Python是为64位操作系统编译的吗?@nmichaels是的,它是@Ignacio+1好指针您的Python是为64位操作系统编译的吗?@nmichaels是的,它是@Ignacio+1好指针