比较multiprocessing和subprocess模块
1、subprocess: 和外部进行交互,如调用外部的一个.py文件(适用于两个.py文件无法同时跑的情况)
2、multiprocessing:和threading有点类似,调用该文件内部的某个函数作为子进程运行,可以提高效率,比如开启多个子进程同时跑。
关于python的进程,常用的库有两个:multiprocessing和subprocess模块。
具体使用时,想要实现并发调用外部指令,应该用哪个模块呢?
研究下两个模块区别:
multiprocessing的核心机制是fork,重开一个进程,首先会把父进程的代码copy重载一遍,但是在windows平台上是不支持fork的,那windows上如何使用呢?
--答案是,if main入口中,就可以照常使用multiprocessing(忘记为啥了/试出来的);
subprocess适用于与外部进程交互,调用外部进程;
那么,如下场景:pc连接手机,想要持续捕捉手机adb日志,然后启动一个app进程,如何实现?
首先,如果使用multiprocessing:
//#coding=utf-8
from multiprocessing import Process
import os
myCmd1='adb logcat -v time>c:/log/ll.txt'
myCmd2='adb shell monkey -p com.yoosal.kanku -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes --bugreport --throttle 1000 -v -v -v 100000'
//子进程要执行的代码
def run_proc1(name):
os.system(myCmd1)
def run_proc2():
os.system(myCmd2)
if name== 'main':
p1 = Process(target=run_proc1,args=('test',))
p2 = Process(target=run_proc2)
p1.start()
p2.start()
p1.join()
p2.join()
print('Child process end.')
运行结果:可正常并行进程1、进程2
如果使用subprocess:
import os
import subprocess
myCmd1='adb logcat -v time>c:/log/ll.txt'
myCmd2='adb shell monkey -p com.yoosal.kanku -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes --bugreport --throttle 1000 -v -v -v 100000'
child1=subprocess.Popen(myCmd1, shell=True,stdout=None)
child2=subprocess.Popen(myCmd2, shell=True,stdout=None)
运行结果:可正常并行进程1、进程2
由此可见,multiprocessing也能用于执行外部指令,他们的区别呢???求解
自己查到的答案是:
subprocess 用来执行外部命令,是os.fork() 和 os.execve() 的封装,即先fork一个子进程,再运行新的外部程序,子进程不会把父进程的模块加载一遍;
而multiprocessing的原理是fork,fork()调用:调用1次,返回两次--操作系统自动把当前进程(父进程)复制了一份(子进程),然后,分别在父进程和子进程内返回,父进程返回子进程的pid,子进程返回0,即父进程和子进程都在运行。
对于外部调用来说,使用multiprocessing太占资源。
这里又有另外一个问题:multiprocessing中,调用p.join()等待子进程执行结束,subprocess模块--父进程如何监听子进程结束?
两个方法:
subprocess.Popen()父进程开启子进程后,不管其是否结束,直接执行下一步;
subprocess.Call()父进程一直等待到子进程运行结束,再执行下一步;
现在一种场景:父进程中使用subprocess.Popen()开启了3个子进程,要等到3个子进程全部结束后,父进程再执行下一步,如何处理?
没有找到可以在父进程里,直接一个方法可以判断所有子进程是否结束的方法,那么常规方法就是自己做判断咯:
//监听子进程是否结束,结束则返回True
def listen_to_child(ss):
i=0
while True:
if ss[i].poll()!=None: //poll返回码:0 正常结束;1 sleep;
//2 子进程不存在;-15 kill;None run
i=i+1
if i>=len(ss):
return True
比较multiprocessing和subprocess模块相关推荐
- subprocess模块详解
原文地址 Python多进程方面涉及的模块主要包括: subprocess:可以在当前程序中执行其他程序或命令: mmap:提供一种基于内存的进程间通信机制: multiprocessing:提供支持 ...
- python subprocess模块 命令执行
subprocess模块中定义了一个Popen类,通过它可以来创建进程,并与其进行复杂的交互.查看一下它的构造函数: __init__(self, args, bufsize=0, executabl ...
- Python subprocess模块
subprocess subprocess模块介绍 subprocess模块是一个可以将系统内的命令结果赋值给变量并打印, 还可以输出命令执行状态,subprocess可以单独将 命令输出结果与执行状 ...
- python subprocess 模块
subprocess 模块中有一个功能Popen , 可以在代码中调用系统的命令 其功能比os.system 更加强大 代码示例: command = 'python -u %s/generalMak ...
- Python常用模块之subprocess模块
当我们需要调用系统的命令的时候,最先考虑的os模块.用os.system()和os.popen()来进行操作. 但是这两个命令过于简单,不能完成一些复杂的操作,如给运行的命令提供输入或者读取命令的输出 ...
- python3中使用subprocess模块执行外部命令
一. subprocess模块介绍 subprocess模块可以替代os模块下的os.system和os.popen等操作方法 subprocess模块在python2和python3上的使用上有一定 ...
- Python之路(第二十篇) subprocess模块
一.subprocess模块 subprocess英文意思:子进程 那什么是进程呢? (一)关于进程的相关理论基础知识 进程是对正在运行程序的一个抽象,进程的概念起源于操作系统,是操作系统最核心的概念 ...
- python的subprocess模块执行shell命令
subprocess模块可以允许我们执行shell命令 一般来说,使用run()方法就可以满足大部分情况 使用run执行shell命令 In [5]: subprocess.run('echo &qu ...
- 模拟ssh, hashlib模块, struct模块, subprocess模块
一. 模拟ssh # ===================================== 服务器端 =====================================import so ...
最新文章
- 面试官:不会看 Explain执行计划,简历敢写 SQL 优化?
- bat 删除文件_利用电脑文本文档建立一个简单方便的删除文件的小程序
- 存储过程参数输入输出
- python什么时候用类_python中什么时候使用自定义类
- python写excel文件出错_【求教】xlutils修改中文Excel文件出错
- java List接口
- LeetCode 1537. 最大得分(切片取出局部最大值)
- 定义整型数组_C语言基础-数组怎么用
- Linux学习第三步(Centos7安装mysql5.7数据库)
- 【华为云技术分享】CentOS7.4系统下,手动安装MySQL5.7的方法
- 学习计算机英语的重要性
- 防火墙 | DDos攻击防范技术
- 渗透测试实习日记day1
- 简单的银行管理系统(接口)
- 【java多线程学习】多线程的基本概念
- 产业实践推动科技创新,京东科技集团3篇论文入选ICASSP 2021
- 【快速打点综合工具 -- ALLiN】
- html页面中引入script标签的src的写法,/与//的区别
- Oracle Check约束
- 学数控编程,知道这三段代码就够了,很实用
热门文章
- 小程序保存海报,canvas绘制然后保存到相册,canvas文字换行计算
- mysql定时备份指定表
- 产品经理基础--02需求收集需求管理
- 图书管理系统——皇帝的新衣
- php imagick 取得psd缩略图,php imagick 获取psd图层信息
- 如何获取可靠的国外服务器IP地址?
- XILINX的vivado下载安装
- learning ddr mode reigster set command cycle time tMRD and tMOD
- 在 Intune 中配置 Windows Defender 防病毒
- 推荐一款“借假修真”的产品原型工具