#2
东海ECS2023-04-12 18:41
|
程序代码:
import os,time
from multiprocessing import Process
def worker(arg):
for i in range(5):
print("子进程执行中>>> 子进程id={0},父进程id={1},子进程编号{2}".format(os.getpid(),os.getppid(),arg))
time.sleep(1)
print("子进程终止,id={0}".format(os.getpid()))
def main(num):
print("主进程执行中>>> 主进程id={0}".format(os.getpid()))
ps=[]
for i in range(num): # 创建子进程实例
p=Process(target=worker,args=(i,))
ps.append(p)
for i in range(num): # 开启进程
ps[i].start()
for i in range(num): # 阻塞进程
ps[i].join()
print("主进程终止")
if __name__ == '__main__':
num = 3 # 要创建的进程数量
main(num)
多进程的编程方法2,派生Process的子类,重写run方法
程序代码:
import os,time
from multiprocessing import Process
class MyProcess(Process):
def __init__(self,arg):
self.arg = arg
Process.__init__(self)
def run(self):
print("子进程开始>>> 子进程id={0},主进程id={1}".format(os.getpid(),os.getppid()))
for i in range(5):
print("子进程执行中...子进程id={0},子进程编号{1}".format(os.getpid(),self.arg))
time.sleep(1)
print("子进程终止,子进程id={}".format(os.getpid()))
def main(num):
p = []
print("主进程开始>>> 主进程id={}".format(os.getpid()))
for i in range(num):
myp=MyProcess(i) # i为传进子程序的参数
p.append(myp)
for i in range(num):
p[i].start()
# myp.join()
print("主进程终止")
if __name__ == '__main__':
main(3)
多进程的编程方法3,使用进程池Pool
程序代码:
import os,time
from multiprocessing import Pool
def worker(arg):
print("子进程开始执行>>> 子进程id={},主进程id={},编号{}".format(os.getpid(),os.getppid(),arg))
time.sleep(1)
print("子进程终止>>> 子进程id={},编号{}".format(os.getpid(),arg))
def main(p_num,w_num):
print("主进程开始执行>>> 主进程id={}".format(os.getpid()))
ps=Pool(p_num) #p_num进程池的任务数
for i in range(w_num): #w_num总任务数
# ps.apply(worker,args=(i,)) # 同步执行
ps.apply_async(worker,args=(i,)) # 异步执行
# 关闭进程池,停止接受其它进程
ps.close()
# 阻塞进程
ps.join()
print("主进程终止")
if __name__ == '__main__':
main(5,20) # 进程池任务数,总任务数