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章,由浅入深.全面系统地介绍了利 ...
随机推荐
- day20200911
UG12.0进入运动仿真模块 新建仿真 定义固定连杆 定义其他连杆 定义运动副 定义驱动 定义解算方案并求解 导出动画
- Redis不是只有get set那么简单
我以前还没接触Redis的时候,听到大数据组的小伙伴在讨论Redis,觉得这东西好高端,要是哪天我们组也可以使用下Redis就好了,好长一段时间后,我们项目中终于引入了Redis这个技术,我用了几下, ...
- HTTP首部字段详解
HTTP首部字段详解 在HTTP/1.1规范中定义了47种首部字段,总共分为四大类: 通用首部字段 -- 请求报文和响应报文两方都会使用的首部 请求首部字段 -- 从客户端向服务器端发送请求报文时使用 ...
- Unity3D学习笔记1——绘制一个三角形
目录 1. 绪论 2. 概述 3. 详论 3.1. 准备 3.2. 实现 3.3. 解析 3.3.1. 场景树对象 3.3.2. 绘制方法 4. 结果 1. 绪论 最近想学习一下Unity3d,无奈发 ...
- Message、Handler、Message Queue、Looper 之间的关系
单线程模型中Message.Handler.Message Queue.Looper之间的关系 1.Message Message即为消息,可以理解为线程间交流的信息.处理数据后台线程需要更新UI,你 ...
- 获取微信公众号的粉丝openid以及用openid获取unionID
第一步获取微信粉丝的openid https://api.weixin.qq.com/cgi-bin/user/get?access_token=access_token access_token这里 ...
- Docker启动PostgreSQL时创建多个数据库
1 前言 在文章<Docker启动PostgreSQL并推荐几款连接工具>中我们介绍如何通过Docker来启动PostgreSQL,但只有一个数据库,如果想要创建多个数据库在同一个Dock ...
- Kubernetes Pod中容器的Liveness、Readiness和Startup探针
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 探针的作用 在Kubernetes的容器生命周期管理中,有三种探针,首先要知道,这探针是属于容器的,而不是Pod: 存 ...
- 13、解决java -version命令报错
13.1.问题描述: 安装jdk后在dos界面中输入"java -version"回车的时候报如下错误: Error opening registry key'software\J ...
- Flask(5)- 动态路由
前言 前面几篇文章讲的路由路径(rule)都是固定的,就是一个路径和一个视图函数绑定,当访问这条路径时会触发相应的处理函数 这样无法处理复杂的情况,比如常见的一个课程分类下有很多个课程,那么他们的 p ...