Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多处理队列中的操作在给定某些任务时挂起_Python_Python 3.x_Message Queue_Python Multiprocessing - Fatal编程技术网

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

我有一对小小的Python模块。一个是用于读取各种格式数据的引用的模块。另一个是一个模块,用于调用Python中的某个函数,如果需要的时间太长,则会有一个超时

有限处理
是一种非常简单的
多处理
包装器:

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。