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()
posted @ 2018-09-21 11:08  空林~~清风~~~  阅读(193)  评论(0)    收藏  举报