对于定义的数据类型,值太大

时间:2010-12-16 18:10:43

标签: python linux

我正在从一个产生大约20 MB / s的特殊设备读取数据

/dev/dvb/adapter0/dvr0

我需要阅读内容并复制到其他fifos

    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版本。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我不知道你的jobm对象是什么,我认为它是由你创建的,因为这是类似对象的唯一Google结果,所以如果我错了就纠正我。

您似乎正在打开视频设备进行阅读,视频设备不断生成视频数据,而不是阅读它,您就是闲置。你似乎没有将device_fd发送到你的工作,因此它无法知道fd上是否有活动,因此当你应该读取时它正在睡眠,这会产生缓冲区溢出。 / p>

如果有可用的话,您需要始终从device_fd读取数据。将fd发送到jobm,并使用pollselect查找其中的活动。

编辑:对不起,我错过了你问题的细节。我所说的仍然适用,但不是直接的 - 你需要同时观察你的输入和输出,而不仅仅是你的输出,因为我已经说过了。

如果fifos无法处理输出,结果您错过了设备上的读取,则会出现问题。你需要1)创建一个缓冲区,它可以容纳数百MB的数据,以防管道写入迟到,2)丢弃数据包。如果缺少部分数据,DVB应用程序应该处理它。您也可以简单地捕获并忽略该异常,尽管它会导致轻微的损坏并在输出中丢失数据。