您的位置:首页 > 文旅 > 美景 > 用python解释进程与协程(python实例二十八)

用python解释进程与协程(python实例二十八)

2024/12/23 9:25:34 来源:https://blog.csdn.net/LNN0212/article/details/140753819  浏览:    关键词:用python解释进程与协程(python实例二十八)

目录

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 randomdef 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.总结

通过运行进程与协程的代码示例,呈现了处理器处理多任务时候的判别方式,方便理解任务并行与通道堵塞的原理。