2014-04-01 8 views
8

बहु मैं समानांतर प्रसंस्करण के लिए बहु मॉड्यूल का उपयोग कर रहा के बच्चे प्रक्रिया। बोले कोड स्निपेट एक्स स्थान में स्ट्रिंग फ़ाइल नाम खोजता है और फ़ाइल नाम लौटाता है जहां स्ट्रिंग मिली। लेकिन कुछ मामलों में खोज प्रक्रिया में काफी समय लगता है, इसलिए मैं 300 से अधिक सेकंड लेने के साथ खोज प्रक्रिया को मारने की कोशिश कर रहा था। इसके लिए मैंने टाइमआउट == 300 दिए गए बेलो के रूप में उपयोग किया, यह खोज प्रक्रिया को मार देता है लेकिन यह खुराक को मार देता है बोले कोड द्वारा बाल प्रक्रिया स्पॉन।/ऑटो को मारने की प्रक्रिया और पूल

कैसे मैं अपने बच्चे की प्रक्रिया के साथ पूल से माता-पिता की प्रक्रिया को मार सकता है:

मैं कई तरह से है, लेकिन कोई सफलता प्राप्त करने की कोशिश की? प्रोसेस एक्सप्लोरर में

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() 

प्रक्रिया ट्री:

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 

कोड स्निपेट के ऊपर dosnt मारने बच्चे प्रक्रिया

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

शोध बच्चे खोज प्रक्रिया को बनाए रखने के लिए, निम्न बच्चे प्रक्रिया भी मारे।

कृपया गिल्ड।

धन्यवाद

उत्तर

7

मैं psutil मॉड्यूल का उपयोग कर मेरी समस्या का समाधान करने में सक्षम हूँ

bellow पोस्ट पर

मिले समाधान:

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 अब मौजूद नहीं है , विधि को [बच्चों] कहा जाता है (http://pythonhosted.org/psutil/#psu til.Process.children) – user37203

+0

मैंने डिमननाइजेशन का उपयोग किया, इसलिए यह दृष्टिकोण वही था जो मैं ढूंढ रहा था। – crsuarezf

संबंधित मुद्दे