python全栈+人工智能入门到精通 视频
第156集 进程、线程1
1、多核CPU实现多任务原理:真正的并行执行多任务只能在多核CPU上实现,但是由于任务数量远远多于CPU的核心数量,所以,操作系统会自动把很多任务轮流调度到每个核心上执行
并发:看上去一起执行,任务数多于CPU核心数
并行:真正一起执行,任务数小于等于CPU核心数
实现多任务的方式:
a、多进程模式
b、多线程模式
c、协程模式
d、多进程和多线程模式
2、对于操作系统而言,一个任务就是一个进程
进程是系统中程序执行和资源分配的基本单位。每个进程都有自己的数据段、代码段和堆栈段
第157集 进程、线程2
from time import sleep
from multiprocessing import Process
import os
'''
multiprocessing库
跨平台版本的多进程模式模块,提供了一个Process类来代表一个进程对象
'''
def run(arg):
while True:
print("hello world %s" % arg)
print("%s %s" % (os.getpid(), os.getppid()))
sleep(2)
if __name__=="__main__":
print("主进程启动")
p1 = Process(target=run, args=(1,))
p2 = Process(target=run, args=(2,))
p1.start()
p2.start()
第158集 进程、线程3
父子进程的先后顺序
from multiprocessing import Process
from time import sleep
def run(str):
print("start")
sleep(1)
print("end")
if __name__ == '__main__':
print("父进程启动")
p = Process(target=run, args=("nice",))
p.start()
p.join()#父进程等待子进程结束
print("父进程结束")
全局变量在多个进程中不能共享
from multiprocessing import Process
from time import sleep
num = 100
def run():
print("子进程开始")
global num#相当于num=100
num += 1
print("子进程结束")
if __name__=="__main__":
print("父进程开始")
p = Process(target=run)
p.start()
p.join()
print("父进程结束 %d" % num) #输出100
第159集 进程、线程4
Pool
from multiprocessing import Process, Pool
def run(arg):
print(arg)
if __name__=="__main__":
p = Pool(2)
for i in range(4):
p.apply_async(run, args=(i,))
p.close()#调用close后不能添加进程
p.join()#调用join前要close