2017-09-06 61 views
1

我試圖終止正在運行的進程,它在超時後運行,但終止了它。但是由它調用的函數一直運行。我通過多重處理調用函數1,如果函數的活性超過10秒,則函數終止。函數1使用子進程在命令行中運行另一個python文件(函數2)。函數2反過來通過run.py(function3)運行另一個python文件。終止python中的所有正在運行的進程

因此,當我終止函數1時,它不會終止仍在運行的函數2和函數3。我需要終止所有三個functions.Sample代碼如下: Python的文件1(功能1)

import multiprocessing 
import time 
from test_multikill import kit 
import subprocess  

count = 0 
def bar(cmd): 
    print(cmd) 
    runcmd = r'\Scripts\python test_files\test_multikill.py' 
    subprocess.call(runcmd, shell=True) 
    for i in range(30): 
     print "Tick" 
     time.sleep(1) 

def mulpro(): 
    cmd = 's' 
    p = multiprocessing.Process(target=bar, args=cmd) 
    p.start() 
    # Wait for 10 seconds or until process finishes 
    p.join(5) 
    # If thread is still active 
    if p.is_alive(): 
     print "running... let's kill it..." 
     # Terminate 
     p.terminate() 
     global count 
     print count 
     count += 1 
     if count <= 2: 
      mulpro() 
      print count 
     p.join() 


if __name__ == '__main__': 

    mulpro() 

的Python文件2(功能2):

import time 
import runpy 

def kit(): 
    result = runpy.run_path(r'test_files\test_multikill2.py', run_name='__main__') 
    for i in range(30): 
     print('I am here', i) 
     time.sleep(1) 

if __name__ == '__main__': 
    kit() 

的Python文件3(功能3) :

import time 

def cat(): 
    for i in range(30): 
     print('I am cat', i) 
     time.sleep(1) 

if __name__ == '__main__': 
    cat() 

輸出:

s 
('I am cat', 0) 
('I am cat', 1) 
('I am cat', 2) 
('I am cat', 3) 
('I am cat', 4) 
running... let's kill it... 
0 
s 
('I am cat', 5) 
('I am cat', 0) 
('I am cat', 6) 
('I am cat', 1) 
('I am cat', 7) 
('I am cat', 2) 
('I am cat', 8) 
('I am cat', 3) 
('I am cat', 9) 
('I am cat', 4) 
running... let's kill it... 
1 
s 
('I am cat', 10) 
('I am cat', 5) 
('I am cat', 0) 
('I am cat', 11) 
('I am cat', 6) 
('I am cat', 1) 
('I am cat', 12) 
('I am cat', 7) 
('I am cat', 2) 
('I am cat', 13) 
('I am cat', 8) 
('I am cat', 3) 
('I am cat', 14) 
('I am cat', 9) 
('I am cat', 4) 
running... let's kill it... 
2 
3 
3 

回答

0

我們不必使用3個函數。我們可以使用一個多處理函數調用另一個具有所有必需實現的函數。通過這種方式,我們可以輕鬆終止多處理調用的函數。

相關問題