Tôi muốnpython: cách tiếp cận đơn giản để giết trẻ em hoặc báo cáo thành công của chúng?
- lệnh shell cuộc gọi (ví dụ 'ngủ' bên dưới) song song,
- Báo cáo tình hình khởi động cá nhân của họ và hoàn tất và
- có thể giết chúng với 'kill -9 parent_process_pid '.
Đã có rất nhiều văn bản về những thứ này nhưng tôi cảm thấy mình chưa tìm thấy giải pháp pythonic tao nhã mà tôi đang tìm kiếm. Tôi cũng đang cố giữ những thứ tương đối dễ đọc (và viết tắt) cho một người hoàn toàn không quen với python.
Tiếp cận của tôi cho đến nay (xem mã bên dưới) đã được:
- đặt subprocess.call (unix_command) trong một chức năng wrapper rằng báo cáo khi bắt đầu và kết thúc của lệnh.
- gọi hàm bao bọc bằng đa xử lý. Xử lý.
- theo dõi các khay thích hợp, lưu trữ chúng trên toàn cầu và tiêu diệt chúng trong signal_handler.
Tôi đã cố gắng tránh một giải pháp định kỳ thăm dò ý kiến các quy trình nhưng tôi không chắc chắn tại sao.
Có cách tiếp cận nào tốt hơn không?
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)
+1 cho tiêu đề nhận được sự chú ý. –
Tôi không biết rằng Python có khả năng giết chết trẻ em ... –
@ Zonda333: Ồ, chắc chắn rồi. 'từ __future__ giết người nhập khẩu'. –