使用Python的多进程程序包,我将设置20个工作程序来抓取.pdf文件的内容。它是这样的:
但是,对于某些文件,该过程停止并且仅挂了几个小时。我想设置一个计时器,使进程终止,然后继续进行下一个文档/路径。
现在我正在执行以下操作:
queue = mp.JoinableQueue()
lock = mp.Lock()
for file, path in files_scrape.items():
queue.put((path, dest_path))
jobs_remaining = queue.qsize()
pbar = tqdm(position = 0, total=jobs_remaining)
consumers = []
for i in range(n_workers):
p = mp.Process(target = textract_worker,
args = (lock, queue, i))
p.daemon = True
consumers.append(p)
for p in consumers:
p.start()
while jobs_remaining > 0:
tmp = queue.qsize()
pbar.update(jobs_remaining - tmp)
jobs_remaining = tmp
搜索类似的问题后,我发现了以下代码片段,并尝试将其添加到代码中:
for p in consumers:
p.start()
p.join(10)
if p.is_alive():
print('function terminated')
p.terminate()
p.join()
但是,这样做的结果似乎是该过程仅等待10秒钟,然后关闭,即使路径中没有要刮擦的文档也是如此。由于循环,这种情况也会一一发生。我还尝试了在所有进程都启动后在单独的循环中传递.join()和.is_alive()函数,但这会得到相似的结果。
有什么想法吗?