我正在运行一个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