目录
1.认识Python
2.环境与工具
2.1 python环境
2.2 Visual Studio Code编译
3.创建进程池,异步执行多个任务
3.1 代码构思
3.2 代码示例
3.3 运行结果
4. 模拟协程堵塞
4.1 代码构思
4.2 代码示例
4.3 运行结果
5.总结
1.认识Python
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字或标点符号,它具有比其他语言更有特色的语法结构。
2.环境与工具
2.1 python环境
在Windows上使用命令行窗口查看所安装的python版本
python --version
2.2 Visual Studio Code编译
Visual Studio Code是一款由微软开发且跨平台的免费源代码编辑器。该软件以扩展的方式支持语法高亮、代码自动补全、代码重构功能,并且内置了命令行工具和Git 版本控制系统。
3.创建进程池,异步执行多个任务
3.1 代码构思
在缓存中实现保留一定数量的进程,当有任务是,从进程池中取出进程执行任务,运行完成后进程归还进程城池;当全部进程都在运行时,新任务请求使用进程的需求将进入等待状态,直到有进程完成。
3.2 代码示例
from multiprocessing import Pool
import os
import time
import random
def test(name,n_second):
print('进程号',os.getpid(),':你好,我是',name)
print('进程号',os.getpid(),':要思考',str(n_second),'秒')
time.sleep(n_second)
print('进程号',os.getpid(),':思考',str(n_second),'秒,结束了。。')
if __name__ == '__main__':
pool_obj=Pool(3)
for i in range(6):
#生成一个随机整数,作为test()函数的参数
j=random.randint(1,20)
pool_obj.apply_async(test,('person'+str(i),j,))
pool_obj.close()
pool_obj.join()
print('主进程结束')
3.3 运行结果
4. 模拟协程堵塞
4.1 代码构思
代码中定义两个协程,并演示了协程之间的切换,每个协程运行过程总遇到阻塞立即切换到另一个协程,使用猴子没顶模拟堵塞。
4.2 代码示例
from gevent import monkey
monkey.patch_all()
import gevent
import time
# 协程调用函数
def work(name):
print(name, '在工作')
print(name, '累了,歇一会。。')
# 模拟阻塞
time.sleep(2)
print(name, '工作完成')
def rest(name, n):
print(name, '在休息')
print(name, '歇息好了')
# 模拟阻塞
time.sleep(2)
print(name, '又开始休息')
if __name__ == '__main__':
# 创建协程对象
g1 = gevent.spawn(work, '张三')
g2 = gevent.spawn(rest, '李四', 6)
gevent.joinall([g1, g2])
4.3 运行结果
5.总结
通过运行进程与协程的代码示例,呈现了处理器处理多任务时候的判别方式,方便理解任务并行与通道堵塞的原理。