我在编写一段代码方面遇到麻烦
我知道如何分别处理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()
有什么用?
谢谢!