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章,由浅入深.全面系统地介绍了利 ...
随机推荐
- 玩转STM32MP157- 在应用层中使用 fbtft
fbtft使用的是framebuffer框架,这种框架将显示设备抽象为帧缓冲区,对framebuffer设备(/dev/fbx(0.1.2..))进行相关操作可以反应到LCD上. 现在尝试下在用户空间 ...
- es6快速入门 系列 - async
其他章节请看: es6 快速入门 系列 async 前文我们已经知道 promise 是一种异步编程的选择.而 async 是一种用于执行异步任务更简单的语法. Tip:建议学完 Promise 在看 ...
- 基于 Electron 实现 uTools 的超级面板
前言 为了进一步提高开发工作效率,最近我们基于 electron 开发了一款媲美 uTools 的开源工具箱 rubick.该工具箱不仅仅开源,最重要的是可以使用 uTools 生态内所有开源插件!这 ...
- 配置本地yum源以及挂载镜像
配置本地yum源以及挂载镜像(centos7.6) 配置yum源 # cd /etc/yum.repos.d 可以备份或者删除里面的文件 新建文件 # touch /etc/yum.repos.d/l ...
- 66.QT-线程并发、QTcpServer并发、QThreadPool线程池
1.线程并发一个程序内部能拥有多个线程并行执行.一个线程的执行可以被认为是一个CPU在执行该程序.当一个程序运行在多线程下,就好像有多个CPU在同时执行该程序.总之,多线程即可以这么理解:多线程是处理 ...
- 20 批量ping主机
#!/bin/bash IP_LIST="`cat /root/ip.txt`" ip_dir="/root/ip_dir" [ ! -d ${ip_dir} ...
- 13、ssh跳板机
13.1.前提条件: 1.跳板机服务器和其它服务器建立了ssh秘钥登录: 2.目前的环境: (1)各服务器上都建立了lc用户,并给于sudo (lc ALL= NOPASSWD:ALL )权限,lc就 ...
- 揭开Docker的面纱
开新坑了,开始挖坑Docker了,兄弟们.为什么需要Docker呢?Docker是什么?这里开始揭开Docker的面纱. 一.为什么需要Docker 可能每个开发人员都有一种困扰,软件开发完之后部署项 ...
- shell 中()、[]、{}、(())、[[]]等各种括号的使用
11 shell中内置关键字[[]]:检查条件是否成立 1.小括号.圆括号() 1.1 单小括号() 用途 命令组 括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余 ...
- Docker原理:Cgroup
目录 Cgroup 主要功能 术语 参考 Cgroup 全称Linux Control Group, 是Linux内核的一个功能,用来限制.控制与分离一个进程组群的资源(如CPU.内存.磁盘输入输出等 ...