python多进程之进程的terminate() 函数
terminate() 函数 是用来杀死子进程的
举例如下:
from multiprocessing import Process
import time
def task(name):
print(f"{name} is running")
time.sleep(2)
print(f"{name} is gone")
if __name__ == "__main__":
# 在windows环境下,开启进程必须在__name__ == "__main__"下面
p = Process(target=task,args=("常辛",)) # 创建一个进程对象
p.start()
p.terminate() # 杀死子进程
print("主开始")
主开始
这里我们用print(p.is_alive())来判断下子进程是否存在
from multiprocessing import Process
import time
def task(name):
print(f"{name} is running")
time.sleep(2)
print(f"{name} is gone")
if __name__ == "__main__":
# 在windows环境下,开启进程必须在__name__ == "__main__"下面
p = Process(target=task, args=("常辛",)) # 创建一个进程对象
p.start()
p.terminate() # 杀死子进程
print(p.is_alive()) # 判断子进程是否活着
print("主开始")
True
主开始
很诧异,竟然为True,这可能是因为程序还没反应过来,我们加个time.sleep()再来看看:
from multiprocessing import Process
import time
def task(name):
print(f"{name} is running")
time.sleep(2)
print(f"{name} is gone")
if __name__ == "__main__":
# 在windows环境下,开启进程必须在__name__ == "__main__"下面
p = Process(target=task, args=("常辛",)) # 创建一个进程对象
p.start()
p.terminate() # 杀死子进程
time.sleep(1)
print(p.is_alive()) # 判断子进程是否活着
print("主开始")
False
主开始
这里判断为False了,结果正确,除此外,还可以用p.join()来代替time.sleep()的作用,执行结果一样:
from multiprocessing import Process
import time
def task(name):
print(f"{name} is running")
time.sleep(2)
print(f"{name} is gone")
if __name__ == "__main__":
# 在windows环境下,开启进程必须在__name__ == "__main__"下面
p = Process(target=task, args=("常辛",)) # 创建一个进程对象
p.start()
p.terminate() # 杀死子进程
# time.sleep(1)
p.join()
print(p.is_alive()) # 判断子进程是否活着
print("主开始")
False
主开始
这里顺带一提,多进程中,p自带name属性(默认情况下为Process-1):
from multiprocessing import Process
import time
def task(name):
print(f"{name} is running")
time.sleep(2)
print(f"{name} is gone")
if __name__ == "__main__":
# 在windows环境下,开启进程必须在__name__ == "__main__"下面
p = Process(target=task, args=("常辛",)) # 创建一个进程对象
p.start()
print(p.name)
print("主开始")
Process-1
主开始
常辛 is running
常辛 is gone
如果要对默认的name属性进行修改,则将
p = Process(target=task, args=(“常辛”,))
改成:
p = Process(target=task,args=(“常辛”,),name = “xiao”)
即可,这里输出的p.name 则为xiao