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模块相关推荐

  1. subprocess模块详解

    原文地址 Python多进程方面涉及的模块主要包括: subprocess:可以在当前程序中执行其他程序或命令: mmap:提供一种基于内存的进程间通信机制: multiprocessing:提供支持 ...

  2. python subprocess模块 命令执行

    subprocess模块中定义了一个Popen类,通过它可以来创建进程,并与其进行复杂的交互.查看一下它的构造函数: __init__(self, args, bufsize=0, executabl ...

  3. Python subprocess模块

    subprocess subprocess模块介绍 subprocess模块是一个可以将系统内的命令结果赋值给变量并打印, 还可以输出命令执行状态,subprocess可以单独将 命令输出结果与执行状 ...

  4. python subprocess 模块

    subprocess 模块中有一个功能Popen , 可以在代码中调用系统的命令 其功能比os.system 更加强大 代码示例: command = 'python -u %s/generalMak ...

  5. Python常用模块之subprocess模块

    当我们需要调用系统的命令的时候,最先考虑的os模块.用os.system()和os.popen()来进行操作. 但是这两个命令过于简单,不能完成一些复杂的操作,如给运行的命令提供输入或者读取命令的输出 ...

  6. python3中使用subprocess模块执行外部命令

    一. subprocess模块介绍 subprocess模块可以替代os模块下的os.system和os.popen等操作方法 subprocess模块在python2和python3上的使用上有一定 ...

  7. Python之路(第二十篇) subprocess模块

    一.subprocess模块 subprocess英文意思:子进程 那什么是进程呢? (一)关于进程的相关理论基础知识 进程是对正在运行程序的一个抽象,进程的概念起源于操作系统,是操作系统最核心的概念 ...

  8. python的subprocess模块执行shell命令

    subprocess模块可以允许我们执行shell命令 一般来说,使用run()方法就可以满足大部分情况 使用run执行shell命令 In [5]: subprocess.run('echo &qu ...

  9. 模拟ssh, hashlib模块, struct模块, subprocess模块

    一. 模拟ssh # ===================================== 服务器端 =====================================import so ...

最新文章

  1. 面试官:不会看 Explain执行计划,简历敢写 SQL 优化?
  2. bat 删除文件_利用电脑文本文档建立一个简单方便的删除文件的小程序
  3. 存储过程参数输入输出
  4. python什么时候用类_python中什么时候使用自定义类
  5. python写excel文件出错_【求教】xlutils修改中文Excel文件出错
  6. java List接口
  7. LeetCode 1537. 最大得分(切片取出局部最大值)
  8. 定义整型数组_C语言基础-数组怎么用
  9. Linux学习第三步(Centos7安装mysql5.7数据库)
  10. 【华为云技术分享】CentOS7.4系统下,手动安装MySQL5.7的方法
  11. 学习计算机英语的重要性
  12. 防火墙 | DDos攻击防范技术
  13. 渗透测试实习日记day1
  14. 简单的银行管理系统(接口)
  15. 【java多线程学习】多线程的基本概念
  16. 产业实践推动科技创新,京东科技集团3篇论文入选ICASSP 2021
  17. 【快速打点综合工具 -- ALLiN】
  18. html页面中引入script标签的src的写法,/与//的区别
  19. Oracle Check约束
  20. 学数控编程,知道这三段代码就够了,很实用

热门文章

  1. 小程序保存海报,canvas绘制然后保存到相册,canvas文字换行计算
  2. mysql定时备份指定表
  3. 产品经理基础--02需求收集需求管理
  4. 图书管理系统——皇帝的新衣
  5. php imagick 取得psd缩略图,php imagick 获取psd图层信息
  6. 如何获取可靠的国外服务器IP地址?
  7. XILINX的vivado下载安装
  8. learning ddr mode reigster set command cycle time tMRD and tMOD
  9. 在 Intune 中配置 Windows Defender 防病毒
  10. 推荐一款“借假修真”的产品原型工具