进程&线程(三):外部子进程subprocess、异步IO、协程、分布式进程
2024-09-06 23:49:48
1、外部子进程subprocess
python之subprocess模块详解--小白博客 - 夜风2019 - 博客园
python subprocess模块 - lincappu - 博客园
之前所说子进程的代码实现都是在主进程内部的,然而很多时候,子进程都是一个外部进程,我们需要控制子进程的输入与输出。
subprocess模块使我们可以非常方便地启动一个外部子进程,然后控制其输入与输出。
例子
通过在Python脚本中写代码,来达到和命令行运行相同的效果(相当于另外开了一个线程):
nslookup www.python.org
代码:
import subprocess
print('$ nslookup www.python.org')
r=subprocess.call(['nslookup','www.python.org'])
print('Exit Code',r)
如果进程还需要传入一些参数,可以通过communicate()方法输入。
2、异步IO、协程
目的是解决CPU与IO之间速度不匹配的问题。虽然多线程/多进程是解决方法之一,但是创建太多进程/线程,那么CPU就会花费较多时间用于进程切换。所以可以采用另一种方法异步IO——当代码需要执行一个耗时的IO时,它只发出IO指令而不等待IO结果,然后就去执行其他代码了。一段时间后,当IO返回结果时,再通知CPU进行处理。
我们按照普通代码的方式是无法写出异步IO模型的。
异步IO需要一个消息循环,在消息循环中,主线程不断重复“读取消息——处理消息”这一过程:
loop=get_event_loop()
while True:
event=loop.get_event()
process_event(event)
3、分布式进程
学习自:
Process可以分布到多台机器上,而Thread只能分布到同一台机器上的多个CPU中。
multiprocessing模块支持多进程,其中的managers子模块支持把多进程分布到多台机器上。
最新文章
- JMeter遇到的问题一:Error writing to server(转)
- Pythonn new-style class and old-style class
- kvm 网桥
- paper 62:高斯混合模型(GMM)参数优化及实现
- linux如何修改主机名
- C语言中调用Lua
- win8命令行
- selenium 使用随笔
- HDU1255覆盖的面积
- 以太坊开发DApp实战教程——用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建电商平台(一)
- 浅入javascript正则表达式的规则.
- JAVA WEB快速入门之环境搭建
- 【自动化测试】robot framwork的一点小发现
- oracle连表语法
- Requests卡死问题
- ES6之Promise的基本用法
- ConfigUtil读取配置文件工具类
- spring-cloud/spring-cloud-sleuth github 项目 mark
- 链接克隆、完整克隆 vmware 快照和克隆
- 关于DLNA
热门文章
- 不难懂-----redux
- PaperRead - A Shader Framework for Rapid Prototyping of GPU-Based Volume Rendering
- 【故障公告】数据库服务器 CPU 100% 引发全站故障
- JavaIo流入门篇之字节流基本使用。
- undefined index: php中提示Undefined ...
- web容器、sevlet容器、spring容器、springmvc容器之间的关系
- iOS App程序内多语言国际化实现 By HL
- Dockerfile镜像实例
- JS快速入门(二)
- Redis和数据库的数据一致性问题