【问题标题】:Terminate all the running process in python终止python中所有正在运行的进程
【发布时间】:2018-02-14 22:34:43
【问题描述】:

我试图终止一个超时后正在运行的进程,它被终止了。但它调用的函数继续运行。我通过多处理调用函数 1,如果函数存活超过 10 秒则终止函数。函数 1 使用子进程在命令行中运行另一个 python 文件(函数 2)。 function2 反过来通过 run.py(function3) 运行另一个 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):

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

【问题讨论】:

    标签: python-2.7 python-multiprocessing kill-process


    【解决方案1】:

    我们不必使用 3 个函数。我们可以使用一个多处理函数来调用另一个具有所有必需实现的函数。这样我们就可以轻松地终止多处理调用的函数

    【讨论】:

      最近更新 更多