복잡한 시뮬레이션의 매개 변수 최적화를 수행 중입니다. 최적 알고리즘의 성능을 높이기 위해 다중 처리 모듈을 사용하고 있습니다. 내가 배운 멀티 프로세싱의 기초는 http://pymotw.com/2/multiprocessing/basics.html입니다. 복잡한 시뮬레이션은 최적화 알고리즘의 주어진 매개 변수에 따라 약 1 ~ 5 분 정도 소요됩니다. 매개 변수가 매우 잘못 선택된 경우 시뮬레이션은 30 분 이상 지속될 수 있으며 결과는 유용하지 않습니다. 그래서 멀티 프로세싱에 대한 타임 아웃을 빌드 할 생각이었습니다. 정의 된 시간 이상 지속되는 모든 시뮬레이션을 종료합니다. 문제의 Heres는 추상화 된 버전 :파이썬 다중 처리 모듈 : 시간 초과가있는 프로세스에 참여
import numpy as np
import time
import multiprocessing
def worker(num):
time.sleep(np.random.random()*20)
def main():
pnum = 10
procs = []
for i in range(pnum):
p = multiprocessing.Process(target=worker, args=(i,), name = ('process_' + str(i+1)))
procs.append(p)
p.start()
print 'starting', p.name
for p in procs:
p.join(5)
print 'stopping', p.name
if __name__ == "__main__":
main()
라인 p.join(5)
5 초 시간 제한을 정의합니다. for-loop for p in procs:
때문에 프로그램은 첫 번째 프로세스가 끝날 때까지 5 초를 기다린 다음 두 번째 프로세스가 끝날 때까지 5 초를 기다리는 등의 작업을하지만 5 초 이상 지속되는 모든 프로세스가 종료되도록합니다. 또한 프로세스가 5 초 이상 지속되지 않으면 프로그램은이 5 초를 기다리지 않아야합니다.
http://stackoverflow.com/q/1191374/2615940 그것은 중복일지도 모르지만 나는 당신을 위해 그것을 깃발을 긋기에 충분하지 않습니다. 그 답변에 대한 제안 된 해결책이 효과가 없을 경우 그 이유를 알려주십시오. – skrrgwasme
이것은 흥미로운 기사이지만, 내가 본 바로는 연속적으로 그리고 동시에 시작되지 않은 프로세스에 대한 솔루션입니다. 내 프로그램은 동시에 프로세스를 시작하고 '전역'시간 초과를 초과하는 프로세스를 종료해야합니다. – brp