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であり、結果は正しいです。さらに、time.sleep()の代わりにp.join()を使用することもでき、実行結果は同じです。
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には独自の名前属性があります(デフォルトでは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
デフォルトの名前属性を変更する場合は、
p = Process(target = task、args =( "常辛"、))
を次のように変更します
。p= Process(target = task、args =( "常辛"、)、name = "xiao")
、ここで出力されるp.nameはxiaoです