如何识别和报告Python多处理器问题

时间:2019-03-18 18:59:09

标签: python queue multiprocessing

我正在运行一个Python 2.7脚本,该脚本处理16个处理器来处理JoinableQueue中排队的作业,从而处理数千个文件和文档。我们遇到了一个问题,其中正在处理的某些文件/文件夹数据已损坏。所有工作似乎都最终完成了,但是数据损坏的工作却要花很长时间。长时间运行的处理实际上是在外部库中进行的,因此一旦启动,进程就需要等待库方法完成。

我不想终止长时间运行的进程,但是当一项工作花费的时间超过30秒或一分钟时,我想记录一条消息,指出哪个工作的工作时间比预期的长。

主要代码被queue.join()阻塞。如何监视处理状态?是在每次处理文档作业时启动异步后台计时器进程的最佳方法,还是有更好的方法?

我已经删除了大部分代码,但是我们正在做的事情如下:

queue = mp.JoinableQueue()

for doc in doclist:
    queue.put(doc)

processes = [mp.Process(target=doprocessing, args=[queue]) for i in range(nb_workers)]
for p in processes:
    p.start()

queue.join()
for p in processes:
    p.terminate()

def doprocessing(queue):
    while True:
        item = queue.get()
        try:
            processDoc(item["id"])  
        except:
            pass
        queue.task_done()

def processDoc(id):
    # Do processing
    pass

0 个答案:

没有答案