Python 多处理队列中的操作在给定某些任务时挂起
我有一对小小的Python模块。一个是用于读取各种格式数据的引用的模块。另一个是一个模块,用于调用Python中的某个函数,如果需要的时间太长,则会有一个超时Python 多处理队列中的操作在给定某些任务时挂起,python,python-3.x,message-queue,python-multiprocessing,Python,Python 3.x,Message Queue,Python Multiprocessing,我有一对小小的Python模块。一个是用于读取各种格式数据的引用的模块。另一个是一个模块,用于调用Python中的某个函数,如果需要的时间太长,则会有一个超时 有限处理是一种非常简单的多处理包装器: def limited_get(uri, q, timeout=60, callback=lambda uri: uri, **kwargs): p = mp.Process(target=callback, args=(uri
有限处理
是一种非常简单的多处理
包装器:
def limited_get(uri, q, timeout=60,
callback=lambda uri: uri,
**kwargs):
p = mp.Process(target=callback, args=(uri, q, kwargs))
p.start()
p.join(timeout)
p.terminate()
# If the process succeeded the exitcode is 0.
return q.get() if p.exitcode == 0 else None
我想做的是将一个与另一个一起使用:在limited\u进程中包装一个datafy.get
,以使其在一定的时间阈值内运行
我是这样使用它的:
import multiprocessing as mp
limited_process.limited_get(
uri,
mp.Queue(),
callback=lambda uri, q, kwargs: q.put(datafy.get(uri, **kwargs)),
timeout=10)
然而,我发现这个函数在某些情况下有效,但在其他情况下无效。当我通过考试时,一切都按照我的预期进行。但是,当我通过它时,进程挂起
不同之处在于,第一次下载是CSV文件,第二次下载是存档格式datafy
以不同的方式处理它们(),在后一种情况下执行大量文件系统工作
有人知道这里发生了什么吗?我开始怀疑,在后一种情况下,我是否在进程内部做了不被“允许”的事情,而在前一种情况下,我不做这些事情。你是在Windows上运行的吗?不,是最新的Ubuntu 16。