如何在由于库函数而挂起的函数上实现超时? [复制]

Posted

技术标签:

【中文标题】如何在由于库函数而挂起的函数上实现超时? [复制]【英文标题】:How can I implement a timeout on a function that hangs due to a library function? [duplicate] 【发布时间】:2020-04-21 06:38:55 【问题描述】:

我正在构建一个程序来验证给定文件树中的媒体和文档文件。当它尝试读取 pdf(使用 PyPDF2)时,它偶尔会冻结程序。我想在函数上实现超时,以便它超时并记录错误而不是崩溃。 这是我的 PDF 函数代码:

def pdf_verify(file, good_files, bad_files):
    try:
        PyPDF2.PdfFileReader(open(file, "rb"))
        good_files.append(file)
    except:
        bad_files.append(file)

    return good_files, bad_files

它尝试使用 PyPDF2 打开 PDF 文件,如果无法打开,它会捕获异常并将文件附加到坏文件列表中。我知道有一种方法可以在 Linux 上执行此操作,但我需要该程序可以在 Windows 上运行。有没有办法做到这一点?谢谢!

【问题讨论】:

【参考方案1】:

有多种方法可以处理这个问题:

    使用线程并监控花在该函数上的时间 使用信号 - 检查limit execution time of a function 等待程序发生异常并使用 except 捕获它

【讨论】:

以上是关于如何在由于库函数而挂起的函数上实现超时? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

linux C 当前进程运行10ms后挂起的功能如何实现.

如何从挂起的 pgPool.connect() 中获取响应/信息?

如何使可能挂起的分叉进程超时?

如何在 boost asio 中设置阻塞套接字的超时时间?

是否定义了跨操作系统睡眠/挂起的 setTimeout 行为?

Cassandra 因压缩和清理而挂起