내가 병렬 (예를 들어 아래의 '수면'에 대한)python : 어린이를 죽이거나 성공을보고하는 간단한 방법?
- 전화 쉘 명령, 개인의 시작과 완료 및
- 것은 그들을 죽일 수에
- 보고 할 '죽일 -9 parent_process_pid '.
이미 많은 종류의 글들이 이미 있지만, 필자가 찾고있는 우아한 파이썬 해결책을 찾지 못한 것 같습니다. 나는 또한 파이썬에 익숙하지 않은 사람에게 상대적으로 읽기 쉬운 (그리고 짧다) 것을 유지하려고 노력하고있다.
내 방식까지 (아래 코드 참조)하고있다 : 명령의 시작과 완료를보고하는 래퍼 함수에서
- 풋 subprocess.call (unix_command).
- multiprocess.Process로 랩퍼 기능을 호출하십시오.
- 적절한 pid를 추적하여 전역으로 저장하고 signal_handler에서이를 삭제하십시오.
주기적으로 프로세스를 폴링하는 솔루션을 피하려고했지만 그 이유를 모르겠습니다.
더 좋은 방법이 있습니까?
import subprocess,multiprocessing,signal
import sys,os,time
def sigterm_handler(signal, frame):
print 'You killed me!'
for p in pids:
os.kill(p,9)
sys.exit(0)
def sigint_handler(signal, frame):
print 'You pressed Ctrl+C!'
sys.exit(0)
signal.signal(signal.SIGINT, sigint_handler)
signal.signal(signal.SIGTERM, sigterm_handler)
def f_wrapper(d):
print str(d) + " start"
p=subprocess.call(["sleep","100"])
pids.append(p.pid)
print str(d) + " done"
print "Starting to run things."
pids=[]
for i in range(5):
p=multiprocessing.Process(target=f_wrapper,args=(i,))
p.daemon=True
p.start()
print "Got things running ..."
while pids:
print "Still working ..."
time.sleep(1)
주목받는 제목입니다. –
파이썬이 아이들을 죽일 수 있다는 것을 몰랐습니다 ... –
@ Zonda333 : 오, 물론. '__future__ import murder'에서. –