Python并发编程-进程的几个方法

时间:2024-01-13 22:26:20

join()方法


from multiprocessing import Process
import time
def func(arg1,arg2):
print('*'*arg1)
time.sleep(5)
print('*'*arg2) if __name__ == '__main__': #windos必须声明
p = Process(target=func, args=(10,20))
p.start()
print('hahaha')
#需求,要求子进程结束后立即执行主进程
p.join()#join()方法用于感知一个子进程的结束,类似将异步的程序改为同步
print('========:运行完了') >>>>
hahaha
**********
********************
========:运行完了

控制多个子进程, 保证所有子进程结束才执行下面的逻辑

from multiprocessing import Process
import time
def func(arg1,arg2):
print('*'*arg1)
time.sleep(5)
print('*'*arg2) if __name__ == '__main__': #windos必须声明
p_lst = []
for i in range(10):
p = Process(target=func, args=(10*i,20*i))
p_lst.append(p)
p.start() #子进程还是异步执行
[p.join() for p in p_lst]#join()每个子进程,保证所有的子进程都结束了才执行下面这句
print('运行完了')

异步写入多个文件

import os
from multiprocessing import Process def func(filename, content):
with open(filename,'w') as f:
f.write(content*10*'*') if __name__ == '__main__':
p_lst = []
for i in range(5):
p = Process(target=func, args=('info%s'%i,i))
p_lst.append(p)
p.start()
[p.join() for p in p_lst]
print([i for i in os.walk(r'C:\Demo')])

开启子进程的第二种方法

from multiprocessing import  Process
import os class MyProcess(Process): #继承Process,实现一个自定义类
def run(self): #必须实现一个run方法, run方法必须是在子进程中执行的代码
print('子进程',os.getpid()) if __name__ == '__main__':
print('主进程:', os.getpid())
p1 = MyProcess()
p1.start()
p2 = MyProcess()
p2.start()

开启子进程第二种方法-参数的传递

from multiprocessing import  Process
import os class MyProcess(Process): #继承Process,实现一个自定义类
def __init__(self,arg1, arg2): #接收参数
super().__init__()#process本身也有__init__,这里需要继承
self.arg1 = arg1
self.arg2 = arg2 def run(self): #必须实现一个run方法, run方法必须是在子进程中执行的代码
print('子进程',os.getpid())
print(self.arg1)
print(self.arg2) if __name__ == '__main__':
print('主进程:', os.getpid())
p1 = MyProcess(1,2) #传递参数
p1.start()
p2 = MyProcess(3,4)
p2.start()