python中进程详解
1:pdb调试:基于命令行的调试工具,非常类似gnu和gdb调试,以下是常用的调试命令:
可以python -m pdb xxx.py(你的py文件名)进入命令行调试模式
|
命令 |
简写命令 |
作用 |
|
beak |
b |
设置断点 |
|
continue |
c |
继续执行程序 |
|
list |
l |
查看当前行的代码段 |
|
step |
S |
进入函数 |
|
return |
r |
执行代码直到从当前函数返回 |
|
quit |
q |
中止并退出 |
|
next |
n |
执行下一行 |
|
|
p |
打印变量的值 |
|
help |
h |
帮助 |
|
args |
a |
查看传入参数 |
|
回车 |
重复上一条命令 |
|
|
brerak |
b |
显示所有断点 |
|
break lineno |
b lineno |
在指定行设置断点 |
|
break file:lineno |
B file:lineno |
在指定文件行设置断点 |
|
clear num |
删除指定断点 |
|
|
bt |
查看函数调用栈帧 |
2:多任务的概念:在现实中人可以同时进行多个动作,在操作系统中同时进行多个任务就叫做多任务,提到多任务就想起了并发和并行。
并发:任务数超过cpu的核数,日常生活中的大部分都是并发 。
并行:任务数小于或等于cpu核数,任务都同时在进行着。
3:fork创建进程(在linux操作系统中适用,在windows中python没有这种用法) 看一下这个小示例:
import os
ret = os.fork()
if ret == 0:
print("1")
else: print("2")
程序输出如下:
root@ubuntu:/home/peng/py高级# python3 test.py
2
1
root@ubuntu:/home/peng/py高级#
你也许会好奇,怎么把1和2都输出了? 看如下解释:
-------------------------------------------------------华丽的分割线---------------------------------------------------
原来的进程叫做父进程,fork语句后生成子进程,而子进程生成后的ret的值为0,但父进程的ret是大于零的,所以父进程执行else语句的内容,子进程执行if后边的语句
所以打印的结果是2 1或者 1 2,但是都会出现1和2
根据系统调度不同输出的结果不同但都会输出
父进程与子进程谁先执行由系统决定,与系统决定相关的因素有:时间片轮转,优先级调度
说一个有趣的东西:fork炸弹 (轻易不要尝试,不然你的电脑可能会gameover)
import os
while True:
os.fork()
会不停的创建新进程,一直到操作系统吧你这个程序干掉为止 ,切记fork炸弹不要乱用,WARNING
---------------------------------------华丽的分隔长线--------------------------------------------------------------------------------
4:Process(类):在windows和linux平台都可以,实现创建子进程的功能。看了如下代码你就会了解的:
from multiprocessing import Process
import os
def run_proc(name):
print(“子进程运行中,name=%s,pid=%d…”%(name,os.getpid())
if __name__ == ‘__main__’:
print(“父进程%d’%os.getpid())
p = Process(target=run_proc,args=(‘test’,))
print(‘子进程将要执行’)
p.start()
p.join()
print(“子进程已结束“)
以上代码中导入相关模块,定义函数。
调用mutiprocessing模块中的Process类,使用Process(targer=xxx(函数名),args=(参数1,参数2,..))这里注意如果有一个参数在后边加一个逗号,在声明子进程后再子进程中调用run_proc函数,并把test作为字符串传给run_proc函数,start方法开启子进程,join()方法让父级进程等待子进程结束后在结束。
5:进程池(Pool)
首先在程序中导入Pool :from multiprocessing import Pool
po=Pool(3)定义一个进程池最大进程数为3
po.apply_async(函数名,(传递给目标的参数元组))调用目标
po.close()关闭进程池,关闭后po不在接受新的请求
po.join()等待所有的子进程执行完成
看以下code:
from multiprocessing import Pool
import time
import os
import random
def test(num):
for i in range(5):
print("===pid=%d==num=%d"%(os.getpid(),num))
time.sleep(1)
po = Pool(3)
for i in range(4):
po.apply_async(test,(i,))
#po.join()
po.close()
po.join()
python中进程详解的更多相关文章
- Python中dict详解
from:http://www.cnblogs.com/yangyongzhi/archive/2012/09/17/2688326.html Python中dict详解 python3.0以上,pr ...
- 2.python中self详解(程序适用于python3版本)
先介绍下Python中的类和实例面向对象最重要的概念就是类(class)和实例(instance),类(class)是抽象的模板,比如学生这个抽象的事物,可以用一个Student类来表示.而实例是根据 ...
- python中闭包详解
谈谈自己的理解:python中闭包,闭包的实质 闭包这个概念好难理解,身边朋友们好多都稀里糊涂的,稀里糊涂的林老冷希望写下这篇文章能够对稀里糊涂的伙伴们有一些帮助~ 请大家跟我理解一下,如果在一个 ...
- Python中super详解
转至:https://mozillazg.com/2016/12/python-super-is-not-as-simple-as-you-thought.html 说到 super, 大家可能觉得很 ...
- python中assert详解
assert基础 官方解释:"Assert statements are a convenient way to insert debugging assertions into a pro ...
- (转)python中@property详解
转:https://www.cnblogs.com/zhangfengxian/p/10199935.html
- Python开发技术详解PDF
Python开发技术详解(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1F5J9mFfHKgwhkC5KuPd0Pw 提取码:xxy3 复制这段内容后打开百度网盘手 ...
- python协程详解
目录 python协程详解 一.什么是协程 二.了解协程的过程 1.yield工作原理 2.预激协程的装饰器 3.终止协程和异常处理 4.让协程返回值 5.yield from的使用 6.yield ...
- 《python开发技术详解》|百度网盘免费下载|Python开发入门篇
<python开发技术详解>|百度网盘免费下载|Python开发入门篇 提取码:2sby 内容简介 Python是目前最流行的动态脚本语言之一.本书共27章,由浅入深.全面系统地介绍了利 ...
随机推荐
- 数位dp从会打模板到不会打模板
打了几个数位$dp$,发现自己除了会打模板之外没有任何长进,遇到非模板题依然什么都不会 那么接下来这篇文章将介绍如何打模板(滑稽) 假设我们要处理$l----r$ 采用记忆化搜索的方式,枚举$< ...
- golang 写文件--详细解释
1,不覆盖指定的文件 先看代码怎么写,下面再具体解释. func writeToFile(msg string) { f, err := os.OpenFile("/home/mingbai ...
- NUC980 运行 RT-Thread 时使用 GPIO
如何使用 GPIO? NuMaker-RTU-NUC980 板子引出的 IO 有: 分别有一个 I2C1.GPIO.SPI0.UART4,RT-Thread 中 NuMaker-RTU-NUC980 ...
- django 导出excel react下载 --- 导出并下载
Dajngo查询数据,查询出来之后生成Excel保存本地 class ExportExcel(APIView): def post(self, request, *args, **kwargs): e ...
- VueX理解
什么是Vuex? 官方说法:Vuex 是一个专为 Vue.js应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 个人理解:Vue ...
- USB上位机通信:CyAPI
至今的工作中,有USB接口通信的需求,记录一下. 建立一个USB设备对象 CCyUSBDevice *USBDevice = new CCyUSBDev(Handle): 打开USB设备 一个USB设 ...
- 6、安装kvm虚拟机
6.1.虚拟机开启虚拟化: 6.2.检查linux虚拟机cpu是否开启了虚拟化: egrep -o 'vmx|svm' /proc/cpuinfo vmx 6.3.安装kvm管理和安装kvm虚拟机的软 ...
- 【网络编程】HTTP简介&URL
目录 前言 1. http 简介 1.1 概念 1.2 原理 1.3 特点 2. URL 简介 2.1 概念 2.2 URL 通用格式 2.3 网页地址 实例说明 3. HTTP 消息结构 3.1 客 ...
- hadoop学习(一)环境的搭建
1.安装几台Linux虚拟机.安装的过程就不赘述了,网上教程很多.win7系统上装了一个VMWare,因为一些原因,VMWare版本不是最新的,是VMWare7.1版本,由于VMWare版本不高,所以 ...
- linux 退出状态码
状态码 描述 0 命令成功结束 1 一般性未知错误 2 不适合的shell 命令 123 命令不可执行 127 没找到命令 128 无效退出参数 128+x 与linux信号x相关的严重错误 130 ...