2017-09-06 30 views
1

タイムアウト後に実行されているプロセスを終了しようとしていますが、終了しました。 function1をマルチプロセスで呼び出し、10秒以上実行している場合は関数を終了します。関数1は、サブプロセスを使用してコマンドラインで別のpythonファイル(function2)を実行します。関数2は、run.py(function3)によって別のpythonファイルを実行します。実行中のすべてのプロセスをPythonで終了する

私は関数1を終了すると、まだ実行中の関数2と関数3は終了しません。 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):私は以下であるすべての3つのfunctions.Sampleコードを終了するために必要

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つの関数を使う必要はありません。 1つのマルチプロセッシング関数を使って、必要なすべての実装を持つ別の関数を呼び出すことができます。このようにして、マルチプロセッシングで呼び出される関数を簡単に終了させることができます。

関連する問題