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