multiprocessing常用方法:
- target:如果传递了函数的引用;
- args:给target指定的函数传递的参数,已元组的方式传递;
- kwargs:给target指定的命名参数;
- name:给进程设定名字
Process创建的实例对象常用方法:
- start():启动子进程实例
- is_alive():判断子进程对象是否还激活;
- join():等待子进程
- terminate():不管任务是否完成,立即终止子进程
Process创建的实例对象常用属性
- name:当前进程的别名;
- pid:当前进程的pid
发现大部分都和之前的线程类似,只有 terminate()终止子进程是特殊的:
terminate()
rom multiprocessing import Process
import time
class MyProcess(Process):
def __init__(self,file):
super().__init__()
self.file = file
def run(self):
with open(self.file,'a',encoding='utf8') as f:
for i in range(2):
time.sleep(0.5)
print(F'{self.file}正在第{i}次写入')
f.write('java-')
if __name__ == '__main__':
ps = []
for i in range(2):
p = MyProcess('test2.txt')
p.start()
ps.append(p)
ps[0].terminate() #终止子进程
运行结果:
test2.txt正在第0次写入
test2.txt正在第1次写入
test2.txt中写入内容为:
java-java-
可见该方法会直接终止运行;
查看进程ID
- self.pid
- os.getpid()
from multiprocessing import Process
import time
class MyProcess(Process):
def __init__(self,file):
super().__init__()
self.file = file
def run(self):
with open(self.file,'a',encoding='utf8') as f:
for i in range(2):
time.sleep(0.5)
print(F'进程pid{self.pid}正在给{self.file}正在第{i}次写入')
f.write('java-')
if __name__ == '__main__':
ps = []
for i in range(2):
p = MyProcess('test4.txt')
p.start()
ps.append(p)
运行结果:
进程pid3076正在给test4.txt正在第0次写入
进程pid7500正在给test4.txt正在第0次写入
进程pid3076正在给test4.txt正在第1次写入
进程pid7500正在给test4.txt正在第1次写入
from multiprocessing import Process
import time
import os
def work1():
for i in range(6):
time.sleep(1)
print(F'-----pid{os.getpid()}在执行任务1-------')
def work2(name):
for i in range(5):
time.sleep(1)
print(F'-----进程pid{os.getpid()}{name}在执行任务1-------')
if __name__ == '__main__':
p1 = Process(target=work2,args=('小静',))
p1.start()
work1()
运行结果:
-----pid4736在执行任务1-------
-----进程pid11712小静在执行任务1-------
-----pid4736在执行任务1-------
-----进程pid11712小静在执行任务1-------
-----pid4736在执行任务1-------
-----进程pid11712小静在执行任务1-------
-----pid4736在执行任务1-------
-----进程pid11712小静在执行任务1-------
-----pid4736在执行任务1-------
-----进程pid11712小静在执行任务1-------
-----pid4736在执行任务1-------