Python并发编程

并发编程多任务

高并发:CPU核数很少,但是进程很多

高并行:CPU的核实要比进程数量一致,进程同时运行

多进程

程序:程序是一个指定的集合

进程:正在执行的程序

程序开始运行时,首先会创建一个主进程

在主进程下,我们可以创建新的进程,子进程依赖于主进程

Python提供了非常好用的多进程包multiprocessing

#name表示进程名
Process(func,name,args)
from multiprocessing import Process

def fun():
    print("123")

def fun1(name):
    print("456")

if __name__=="__main__":
    p1 = Process(target=fun)  # 创建进程
    p1.start()  # 执行进程
    p1.join()  # 主进程等待子进程执行完成

    p2 = Process(target=fun1, args=("test",))  # 传递给函数参数
    p2.start()
    p2.join()

# 123
# 456

Process类常用方法

p.start()   #启动进程,并调用该子进程中的p.run()
p.run()     #进程启动时运行的方法,调用target指定的函数,自定义的类的类中一定要实现该方法
p.terminate()   #强制终止进程,但是不会回收垃圾
p.is_alive()    #如果p仍然运行,返回True,用来判断进程是否在运行
p.join([timeout])   #主进程等待子进程执行完毕,可以设置等待时间
#常用属性
name    #进程的名字
pid     #进程的ID
from multiprocessing import Process

num=1
def fun1():
    global num
    num+=1      #导入主进程的num变量,但是变量是独立的
    print("进程1:%d" % num)

def fun2():
    global num
    num+=10     #导入主进程的num变量,但是变量是独立的
    print("进程2:%d" % num)

if __name__ == '__main__':
    p1= Process(target=fun1)
    p2=Process(target=fun2)
    p1.start()  #两个子进程同时执行
    p2.start()
    p1.join()
    p2.join()

# 进程2:11
# 进程1:2

通过类的方式来创建进程

from multiprocessing import Process
import time

#通过类继承的方式来创建要运行的进程
class test_process(Process):
    def run(self):
        n = 5
        while n>=0:
            print(n,end=" ")
            time.sleep(1)
            n-=1
if __name__ == '__main__':
    p = test_process()
    p.start()
    p.join()
#5 4 3 2 1 0

使用进程池创建多个进程

#multiprocessing.Pool常用函数解析
apply_async()   #使用非阻塞方式调用func
apply()         #使用阻塞方式调用func
close()         #关闭pool,不再接受新的任务
terminate()     #不管任务是否完成,立即终止
join()          #主进程阻塞,等待子进程的退出,必须在close或terminate后使用
from multiprocessing import Pool

def func(num):
    print(num,end=" ")

if __name__ == '__main__':
    p = Pool()  #创建进程池,参数为同时可执行进程的数量
    for i in range(20):
        p.apply_async(func, args=(i,))  #创建20个进程,进程会同时执行
    p.close()
    p.join()
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
© 版权声明
THE END
喜欢就支持以下吧
点赞0
分享
评论 抢沙发
四曲的头像-四曲博客

昵称

取消
昵称表情代码图片