【问题标题】:Value too large for defined data type对于定义的数据类型,值太大
【发布时间】:2010-12-16 18:10:43
【问题描述】:

我正在从一个产生大约 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 版本。

有什么建议吗?

【问题讨论】:

标签: python linux


【解决方案1】:

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

您似乎正在打开视频设备进行阅读,视频设备不断产生视频数据,而您没有阅读,而是处于空闲状态。您似乎没有将device_fd 发送到您的jobm 事物,因此它不知道fd 上是否有活动,因此当您应该阅读时它正在休眠,这会造成缓冲区溢出。

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

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

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

【讨论】:

    猜你喜欢
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    相关资源
    最近更新 更多