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章,由浅入深.全面系统地介绍了利 ...
随机推荐
- 【VBA】延时函数
延时函数(单位秒),例如延时0.5秒 1 Sub 延时() 2 delay (0.5) 3 Debug.Print "延时0.5秒" 4 End Sub 5 6 Sub delay ...
- Java算法面试题(史上最强、持续更新、吐血推荐)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- Java8中一个极其强悍的新特性,很多人没用过(非常实用)
Java8中有两个非常有名的改进,一个是Lambda表达式,一个是Stream.如果我们了解过函数式编程的话,都知道Stream真正把函数式编程的风格引入到了java中.这篇文章由简入繁逐步介绍Str ...
- k8s-nginx二进制报Illegal instruction (core dumped)
1.环境 系统:CentOS 7.3 内核:x86 环境:虚拟机 2.问题 收到一个现场问题,k8s环境中nginx的pod都启动异常. #kubectl get pod |grep nginx ng ...
- 聊聊 Feign 的实现原理
What is Feign? Feign 是⼀个 HTTP 请求的轻量级客户端框架.通过 接口 + 注解的方式发起 HTTP 请求调用,面向接口编程,而不是像 Java 中通过封装 HTTP 请求报文 ...
- js笔记5
1.逻辑运算 || && ! ||:遇到第一个为true的值就中止并返回 &&:遇到第一个为false的值就中止并返回,如果没有false值,就返回最后一个不是fa ...
- external-attacher源码分析(1)-main方法与启动参数分析
更多 ceph-csi 其他源码分析,请查看下面这篇博文:kubernetes ceph-csi分析目录导航 摘要 ceph-csi分析-external-attacher源码分析.external- ...
- 运行cmd时提示你可能没有适当的权限访问该项目
Windows无法访问指定设备.路径或文件.你可能没有适当的权限访问该项目. 方法/步骤 在C:\Windows\System32目录下中找到cmd.exe文件 右键点击 "属性 ...
- HTTP:Java实现HTTP请求的三种方式
目前JAVA实现HTTP请求的方法用的最多的有两种: 一种是通过HTTPClient这种第三方的开源框架去实现.HTTPClient对HTTP的封装性比较不错,通过它基本上能够满足我们大部分的需求,H ...
- gitolite安装及配置
1.客户端(1)使用ssh-keygen命令在当前用户根目录下生成密钥(2)将该密钥远程拷贝到gitserver服务器上:scp ~/.ssh/id_rsa.pub user@ip:/tmp/neu. ...