03 初识并发编程

操作系统简单介绍

多道技术:

  空间复用:把许多进程都放入内存中,等待操作系统操作

  时间复用:在内存中一个程序中有io阻塞程序,操作系统会在程序阻塞时,执行其他的程序

进程之间是空间隔离的

并发

  伪并行,看着像同时运行,其实是任务之间的切换(遇到io切换的会提高代码效率) ,任务切换+保存状态(保存现场)

并行

  真正的同时在运行,应用的是多核技术(多个cpu)

进程三状态:就绪(等待操作系统调度去cpu里面执行)  执行  阻塞 

提交任务的方式:同步异步   任务的执行状态:阻塞非阻塞

异步:任务的提交方式,多个任务提交出去,同时执行

 :

异步非阻塞:

  多个任务同时提交,并且在程序运行的时候没有阻塞

进程的两种创建方式

1)

Process(    target=f1,  args=(i,) (  或者  kwargs={‘形参名为key:值}  )      )

from multiprocessing import Process

def f1(n):
    print(n)

if __name__ == '__main__':
    # p1 = Process(target=f1,args=('钢铁侠',)) #创建进程对象
    p1 = Process(target=f1,kwargs={'n':'钢铁侠'}) #创建进程对象
    p1.start() 

2)

from multiprocessing import Process

class MyProcess(Process):

    def __init__(self,n):
        super().__init__()  #别忘了执行父类的init
        self.n = n

    def run(self):
        print('宝宝and%s'%self.n)

if __name__ == '__main__':
    p1 = MyProcess('苍老师')
    p1.start()

Join方法

  主进程等待子进程执行结束再继续执行

import time
from multiprocessing import Process

def f1():
    time.sleep(2)
    print('xxxx')

def f2():
    time.sleep(2)
    print('ssss')

if __name__ == '__main__':
    p1 = Process(target=f1,)
    p1.start()
    p1.join()  # 主进程等待子进程运行完才继续执行
    print('开始p2拉')

    p2 = Process(target=f2,)
    p2.start()
    p2.join()
    print('我要等我的子进程...')
    print('我是主进程')

for 循环开启进程

import time
from multiprocessing import Process

def f1(i):
    time.sleep(3)
    print(i)

if __name__ == '__main__':
    for i in range(20):
        p1 = Process(target=f1,args=(i,))
        p1.start()