带有多进程超时终止功能的Python多进程

时间:2019-04-30 00:33:31

标签: python multiprocessing

我在编写一段代码方面遇到麻烦

  1. 产生多个进程并
  2. 对于任何单个进程,请杀死 如果5秒钟后它仍然存在,则表示该过程

我知道如何分别处理1)和2),但是我不知道如何将它们组合在一起。任何的意见都将会有帮助。谢谢!

对于1)我知道如何用here中的返回字典编写一个简单的多进程程序:

import multiprocessing

def worker(procnum, return_dict):
    '''worker function'''
    print str(procnum) + ' represent!'
    return_dict[procnum] = procnum


if __name__ == '__main__':
    manager = multiprocessing.Manager()
    return_dict = manager.dict()
    jobs = []
    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i,return_dict))
        jobs.append(p)
        p.start()

    for proc in jobs:
        proc.join()
    print return_dict.values()

对于2),我的程序挂起了一些数据,因为该函数是Python的外部C ++扩展,因此不会返回。由于要处理一百万个数据点,因此我需要一个超时终止程序,以便在该函数运行时间过长时终止该函数,并继续进行下一个迭代。目前,我设置了5秒的等待时间,以终止该过程。我知道如何从here编写代码:

import multiprocessing
import time

# bar
def bar():
    for i in range(100):
        print "Tick"
        time.sleep(1)

if __name__ == '__main__':
    # Start bar as a process
    p = multiprocessing.Process(target=bar)
    p.start()

    # Wait for 10 seconds or until process finishes
    p.join(10)

    # If thread is still active
    if p.is_alive():
        print "running... let's kill it..."

        # Terminate
        p.terminate()
        p.join()

但是,正如我提到的,我不确定如何将这两段代码结合在一起。主要是因为我不知道将p.join()if p.alive()放在哪里。既然我们已经有了p.start(),p.join()有什么用?

谢谢!

0 个答案:

没有答案