5

Tôi đã tìm kiếm một cách để bắt đầu và chấm dứt một "công việc hàng loạt" chạy dài trong python. Ngay bây giờ tôi đang sử dụng "os.system()" để khởi chạy một công việc hàng loạt chạy dài bên trong mỗi tiến trình con. Như bạn có thể đã đoán, "os.system()" sinh ra một tiến trình mới bên trong tiến trình con đó (quá trình cháu?), Vì vậy tôi không thể giết công việc hàng loạt từ tiến trình cha-mẹ. Để cung cấp một số hình dung về những gì tôi vừa mô tả:lập trình thực hiện và chấm dứt một quy trình chạy hàng loạt dài trong python

Main (grandparent) process, with PID = AAAA 
      | 
      |------> child process with PID = BBBB 
         | 
         |------> os.system("some long-running batch file) 
            [grandchild process, with PID = CCCC] 

Vì vậy, vấn đề của tôi là tôi không thể giết chết quá trình cháu từ ông bà ...

Câu hỏi của tôi là, liệu có một cách để bắt đầu một công việc hàng loạt chạy dài trong một tiến trình con, và có thể giết công việc hàng loạt đó bằng cách chấm dứt tiến trình con? Các lựa chọn thay thế cho os.system() mà tôi có thể sử dụng để tôi có thể xóa công việc theo lô từ quy trình chính là gì?

Cảm ơn !!

Trả lời

2

Nếu bạn đang sử dụng hệ thống tương thích với Posix (ví dụ: Linux hoặc OS X) và không có mã Python nào phải được chạy sau quá trình con, hãy sử dụng os.execv. Nói chung, hãy tránh os.system và thay vào đó hãy sử dụng mô-đun subprocess.

-1

Nếu bạn muốn kiểm soát việc bắt đầu và dừng các tiến trình con bạn phải sử dụng luồng. Trong trường hợp đó, không nhìn xa hơn mô-đun threading của Python.

3

subprocess mô-đun là cách thích hợp để sinh đẻ và kiểm soát các quy trình bằng Python.

từ các tài liệu:

mô-đun Các tiến trình con cho phép bạn quy trình mới spawn, kết nối với đường ống đầu vào/đầu ra/lỗi của họ, và có được mã trở lại của họ. này mô-đun có ý định thay thế một số khác, module cũ và chức năng, chẳng hạn như:

os.system
os.spawn
os.popen
popen2
lệnh

vì vậy .. Nếu bạn đang sử dụng Python 2.4+, subprocess là sự thay thế cho os.system

cho quá trình dừng, kiểm tra ra các phương pháp terminate()communicate() của các đối tượng Popen.