如果仍然有效,则在一定时间后停止多进程

时间:2019-11-13 12:40:29

标签: python multiprocessing

使用Python的多进程程序包,我将设置20个工作程序来抓取.pdf文件的内容。它是这样的:

  1. 我将文件路径列表传递给函数
  2. 该功能检查哪些文档已被刮取,哪些尚未被刮除
  3. 该功能开始抓取丢失的文档
  4. 该功能会转到下一个路径

但是,对于某些文件,该过程停止并且仅挂了几个小时。我想设置一个计时器,使进程终止,然后继续进行下一个文档/路径。

现在我正在执行以下操作:

加速进程

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()函数,但这会得到相似的结果。

有什么想法吗?

0 个答案:

没有答案