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章,由浅入深.全面系统地介绍了利 ...
随机推荐
- 【UG二次开发】创建、查询、编辑成型特征的函数
创建成型特征函数UF_MODL_create_boss 通过设置凸台的参数建立凸台特征UF_MODL_create_rect_pad 通过设置矩形凸垫的参数建立矩形凸垫特征UF_MODL_create ...
- spring boot 并发请求,其他系统接口,丢失request的header信息【多线程、线程池、@Async 】
场景:一次迭代在灰度环境发版时,测试反馈说我开发的那个功能,查询接口有部分字段数据是空的,后续排查日志,发现日志如下: feign.RetryableException: cannot retry d ...
- SSM动态展示分页
这个作业属于哪个课程 2021春软件工程实践|S班(福州大学) 这个作业要求在哪里 作业具体要求 这个作业的目标 个人技术 参考文献 ... 目录 技术概述 技术详述 问题和解决过程 总结 参考文献 ...
- Duilib的双缓冲实现,附带GDI、WTL的双缓冲实现
前言: 闪烁问题,之前的经验是使用双缓冲,借此机会,把双缓冲的研究心得总结下. 双缓冲的含义: 缓冲这个词,相信大家都不陌生,Cache.主要是为了解决上下游(或者模块.或者系统)等性能不匹配问题.如 ...
- 自定义组件开发:使用v-model封装el-pagination组件
1.前言 通过封装el-pagination组件开发自定义分页组件的类似文章网上已经有很多了,但看了一圈,总是不如意,于是决定还是自己动手搞一个. 2.背景 2.1.常规分页处理方法 利用el-pag ...
- 1.5Java、万维网以及其他
要点提示:Java是一种功能强大和多用途的编程语言,可用于开发运行在移动设备.台式计算机以及服务器端的软件.
- Flask(5)- 动态路由
前言 前面几篇文章讲的路由路径(rule)都是固定的,就是一个路径和一个视图函数绑定,当访问这条路径时会触发相应的处理函数 这样无法处理复杂的情况,比如常见的一个课程分类下有很多个课程,那么他们的 p ...
- AcWing 1289. 序列的第k个数
BSNY 在学等差数列和等比数列,当已知前三项时,就可以知道是等差数列还是等比数列. 现在给你 整数 序列的前三项,这个序列要么是等差序列,要么是等比序列,你能求出第k项的值吗. 如果第k项的值太大, ...
- 调整/home和/root空间容量
转载请注明出处:http://www.cnblogs.com/gaojiang/p/6767043.html 1.查看磁盘情况:df -h 2.卸载/homeumount /home umount / ...
- ExtJs4学习(三)组件查找 ComponentQuery类
Extjs3.x: ID:这就是所熟知的Ext.getCmp("组件ID"),缺点是id重复导致出错. ref:在EXTJS3中,所有的组件都会有一个ref属性,也就是refere ...