python并发编程方法_Python并发编程-进程的几个方法

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值