2014-04-01 16 views
8

Tôi đang sử dụng mô-đun đa xử lý để xử lý song song. Đoạn mã dưới đây tìm kiếm tên tệp chuỗi ở vị trí X và trả về tên tệp nơi chuỗi tìm thấy. Nhưng trong một số trường hợp phải mất nhiều thời gian để tìm kiếm quy trình vì vậy tôi đã cố gắng để giết quá trình tìm kiếm mất hơn 300 giây. Vì tôi đã sử dụng hết thời gian chờ == 300 như dưới đây, quá trình tìm kiếm sẽ giết chết quá trình con đẻ trứng bằng mã dưới đây.Quá trình tự động diệt và quá trình xử lý đa hồ bơi của trẻ

Tôi đã cố gắng tìm nhiều cách nhưng không thành công:/

Làm cách nào để tôi có thể giết quá trình cha mẹ khỏi Bể bơi cùng với quá trình con?

import os 
from multiprocessing import Pool 

def runCmd(cmd): 
    lresult = os.popen(cmd).read() 
    return lresult 

main(): 
    p = Pool(4) 
    data_paths = [list of paths of store data] 
    search_cmds = [ "SearchText.exe %s < %s"%(data_path, filename) for data_path in data_paths ] 
    results = [p.apply_async(runCmd, (cmd,), callback = log_result) for cmd in search_cmds] 
    try: 
     for result in results: 
      root.append(result.get(timeout=300)) 
     #rool holds the result of search process 
    except TimeoutError: 
     for c in multiprocessing.active_children(): 
      print '----->',c.pid 
      os.kill(c.pid, signal.SIGTERM) 
    p.close() 
    p.join() 

if __name__ == '__main__': 
    main() 

Process Tree trong Process Explorer:

cmd.exe 
------python.exe 
----------------python.exe 
--------------------------cmd.exe 
---------------------------------SearchText.exe 
----------------python.exe 
--------------------------cmd.exe 
---------------------------------SearchText.exe 
----------------python.exe 
--------------------------cmd.exe 
---------------------------------SearchText.exe 
----------------python.exe 
--------------------------cmd.exe 
---------------------------------SearchText.exe 

trên đoạn mã dosnt giết quá trình con

--------------------------cmd.exe 
---------------------------------SearchText.exe 
--------------------------cmd.exe 
---------------------------------SearchText.exe 
--------------------------cmd.exe 
---------------------------------SearchText.exe 
--------------------------cmd.exe 
---------------------------------SearchText.exe 

Luận cương quá trình tìm kiếm con giữ lại, những tiến trình con cũng bị giết.

Vui lòng guild.

Cảm ơn

Trả lời

7

tôi có thể giải quyết vấn đề của tôi sử dụng mô-đun psutil

Tìm thấy giải pháp về bài đăng dưới đây:

import psutil, os 

def kill_proc_tree(pid, including_parent=True):  
    parent = psutil.Process(pid) 
    for child in parent.get_children(recursive=True): 
     child.kill() 
    if including_parent: 
     parent.kill() 

me = os.getpid() 
kill_proc_tree(me) 

https://stackoverflow.com/a/4229404/420557

+3

get_children không tồn tại nữa , phương thức này được gọi là [trẻ em] (http://pythonhosted.org/psutil/#psu til.Process.children) – user37203

+0

Tôi đã sử dụng daemonize, vì vậy phương pháp này chính xác là những gì tôi đang tìm kiếm. – crsuarezf

Các vấn đề liên quan