python之系统编程 --进程
1.调试(PDB)
代码:
[root@master gaoji]# vim test2.py
1 #!/usr/local/bin/python3
2 # -*- coding:utf-8 -*-
3
4 def getAverage(a,b):
5 result = a + b
6 print("result=%d" %result)
7 return result
8
9 a = 100
10 b = 200
11 c = a + b
12 ret = getAverage(a,b)
13 print(ret)
[root@master gaoji]# python3 -m pdb test2.py
> /home/weixin/gaoji/test2.py(4)<module>()
-> def getAverage(a,b):
(Pdb) l
1 #!/usr/local/bin/python3
2 # -*- coding:utf-8 -*-
3
4 -> def getAverage(a,b):
5 result = a + b
6 print("result=%d" %result)
7 return result
8
9 a = 100
10 b = 200
11 c = a + b
(Pdb)
################################进程########################
多任务理解:
##########父进程与子进程的先后顺序理解################
[root@master process]# vim 01-进程.py
1 #!/usr/local/bin/python3
2 # -*- coding:utf-8 -*-
3
4 import os
5 import time
6 ret = os.fork()
7
8 if ret == 0:
9 print('---子进程1---')
10 time.sleep(5)
11 print('---子进程2---')
12 else:
13 print('---父进程---')
14 time.sleep(3)
15
16 print('---over---')
执行结果:
总结下:ret 的值有两个,一个是等于0,一个是大于0;说白点就是执行了两遍
#################全局变量在多进程中不共享##############
[root@master 进程]# vim 02-进程.py
1 #!/usr/local/bin/python3
2 # -*- coding:utf-8 -*-
3
4
5 import os-
6 import time
7 g_sum = 100
8
9 pid = os.fork()
10 if pid == 0:
11 print('---process-01---')
12 g_sum += 1
13 print('---process-01--%d' %g_sum)
14 else:
15 time.sleep(3) ###为了保证让子进程优先运行
16 print('---process-02---')
17 print('---process-02--%d' %g_sum)
18
执行结果:
[root@master 进程]# python3 02-进程.py
---process-01---
---process-01--101
---process-02---
---process-02--100 ###结果还是100,并没与变成101
#############多个fork###########
代码:
[root@master process]# cat 01-进程.py
#!/usr/local/bin/python3
# -*- coding:utf-8 -*- import os
import time ret = os.fork()
if ret == 0:
print('---1---')
else:
print('---2---') ret = os.fork()
if ret == 0:
print('---11---')
else:
print('---22---') ####最后一共有四个进程#####
执行结果:
[root@master process]# python3 01-进程.py
---2---
---22---
---11---
---1---
---22---
---11---
另外一种:
执行结果:
[root@master process]# python3 01-进程.py
---2---
---22---
---11---
---1---
##########多个fork2#################
执行结果:
[root@master process]# python3 03-进程.py
---1---
---1---
---1---
---1---
---1---
---1---
---1---
---1---
[root@master process]# python3 03-进程.py |wc -l
8
###########fork炸弹(千万别玩这个,等于自杀)##########
#!/usr/local/bin/python3
2 # -*- coding:utf-8 -*-
3
4
5 import os-
6
7 os.fork()
8 os.fork()
9
10 while True:
11 os.fork()
##########process创建子进程(这个可以跨平台,比fork好用,推荐使用)############
[root@master process]# vim 04-process子进程.py
1 #!/usr/local/bin/python3
2 # -*- coding:utf-8 -*-
3
4
5 from multiprocessing import Process
6
7 import time
8 def test():
9 while True:
10 print('---test---')
11 time.sleep(1)
12
13 p = Process(target=test) ###创建子进程
14 p.start() ###让这个进程开始执行test函数
15
16 while True:
17 print('---main---')
18 time.sleep(1)
执行结果:
[root@master process]# python3 04-process子进程.py ###主进程去执行---main---,子进程去执行test()函数
---main---
---test---
---main---
---test---
---main---
---test---
---main---
---test---
---main---
---test---
---main---
---test---
####################通过process 创建的子进程,主进程会等待子进程的结束(fork 不会等待)###########
[root@master process]# vim 05-process子进程.py
1 #!/usr/local/bin/python3
2 # -*- coding:utf-8 -*-
3
4
5 from multiprocessing import Process
6
7 import time
8 def test():
9 for i in range(4):
10 print('---test---')
11 time.sleep(1)
12
13 p = Process(target=test)
14 p.start()
15
16 print('---11---')
执行结果:
[root@master process]# python3 05-process子进程.py
---11---
---test---
---test---
---test---
---test---
[root@master process]# ###在子进程所有执行完才出现[root@master process]# 说明,是主进程在等待子进程的结束
############join 的作用#################
###如果想让子进程的语句执行完再执行主进程的语句####
[root@master process]# vim 05-process子进程.py
1 #!/usr/local/bin/python3
2 # -*- coding:utf-8 -*-
3
4
5 from multiprocessing import Process
6
7 import time
8 import random
9 def test():
10 for i in range(random.randint(1,5)):
11 print('---test---')
12 time.sleep(1)
13
14 p = Process(target=test)
15 p.start()
16 p.join() ###称为堵塞
17 print('---main---')
执行结果:
[root@master process]# python3 05-process子进程.py
---test---
---main---
[root@master process]# python3 05-process子进程.py
---test---
---test---
---main--- ####‘---main---’总是在子进程执行完才执行主进程,主要是join这个方法
#############通过process 的子类创建子进程############
[root@master process]# vim 06-process子进程.py
1 #!/usr/local/bin/python3
2 # -*- coding:utf-8 -*-
3
4
5 from multiprocessing import Process
6
7 import time
8 class Process_zilei(Process): ####通过继承父类,父类一定有start()方法,start()方法里面会调用run方法,通过方法重写run方法
9 def run(self):
10 while True:
11 print('---1---')
12 time.sleep(1)
13
14 p = Process_zilei()
15 p.start()
16
17
18 while True:
19 print('---main---')
20 time.sleep(1)
##############进程池(多任务,一般都试用这种方法)################
池一般是缓冲用的
##############进程间通信-queue队列####################
python之系统编程 --进程的更多相关文章
- linux系统编程-进程
进程 现实生活中 在很多的场景中的事情都是同时进行的,比如开车的时候 手和脚共同来驾驶汽车,再比如唱歌跳舞也是同时进行的: 如下是一段视频,迈克杰克逊的一段视频: http://v.youku.com ...
- Linux系统编程@进程通信(一)
进程间通信概述 需要进程通信的原因: 数据传输 资源共享 通知事件 进程控制 Linux进程间通信(IPC)发展由来 Unix进程间通信 基于System V进程间通信(System V:UNIX系统 ...
- Python之系统编程笔记
概念 命令行工具. Shell 脚本. 系统管理 系统模块 sys 提供一组功能映射Python运行时的操作系统 os 提供跨平台可移植的操作系统编程接口 os.path 提供文件及目 ...
- linux服务器开发二(系统编程)--进程相关
进程相关的概念 程序与进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(CPU.内存.打开的文件.设备.锁等等). 进程,是一个抽象的概念,与操作系统原理联系紧密.进程是活跃的程序,占用系 ...
- Linux系统编程@进程管理(一)
课程目标: 构建一个基于主机系统的多客户即时通信/聊天室项目 涉及的理论知识 进程控制:僵尸进程/孤儿进程.进程控制.守护进程... 进程间通信:管道.命名管道.信号... 多线程编程: 锁.信号量. ...
- Python之网路编程进程理论基础
背景知识 顾名思义,进程即一个软件正在进行的过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老的也是最重要的抽象概念之一.操作系统的其他 ...
- Linux系统编程@进程管理(二)
1.创建守护进程(Deamon) 守护进程的概念与作用 后台服务程序 – 系统服务,进程名字往往以’d’结尾,生存周期比较长(系统装入时启动,关闭时候终止.系统装入两种启动方式:1从启动脚本.etc/ ...
- [linux] C语言Linux系统编程进程基本概念
1.如果说文件是unix系统最重要的抽象概念,那么进程仅次于文件.进程是执行中的目标代码:活动的.生存的.运行的程序. 除了目标代码进程还包含数据.资源.状态以及虚拟化的计算机. 2.进程体系: 每一 ...
- Linux系统编程——进程替换:exec 函数族
在 Windows 平台下,我们能够通过双击运行可运行程序,让这个可运行程序成为一个进程.而在 Linux 平台.我们能够通过 ./ 运行,让一个可运行程序成为一个进程. 可是.假设我们本来就执行着一 ...
随机推荐
- 朴素贝叶斯分类算法-----java
1.贝叶斯分类的基础--贝叶斯定理 已知某条件概率.怎样得到两个事件交换后的概率,也就是在已知P(A|B)的情况下怎样求得P(B|A). 这里先解释什么是条件概率: 表示事件B已经发生的前提下,事件A ...
- Chrome自带恐龙小游戏的源码研究(四)
在上一篇<Chrome自带恐龙小游戏的源码研究(三)>中实现了让游戏昼夜交替,这一篇主要研究如何绘制障碍物. 障碍物有两种:仙人掌和翼龙.仙人掌有大小两种类型,可以同时并列多个:翼龙按高. ...
- 研究下JavaScript中的Rest參数和參数默认值
研究下JavaScript中的Rest參数和參数默认值 本文将讨论使 JavaScript 函数更有表现力的两个特性:Rest 參数和參数默认值. Rest 參数 通常,我们须要创建一个可变參数的函数 ...
- eclipse spring4 ehache2.10 整合
http://blog.csdn.net/tonytfjing/article/details/39251507 http://my.oschina.net/duoduo3369/blog/17392 ...
- .net 平台下的AI框架
Aforge.net之旅——开篇:从识别验证码开始 基于AForge.Net框架的扑克牌识别 人工神经网络入门(4) —— AFORGE.NET简介 .NET开源工程推荐(Accord,AForge, ...
- 【BZOJ4843】[Neerc2016]Expect to Wait 排序
[BZOJ4843][Neerc2016]Expect to Wait Description ls最近开了一家图书馆,大家听说是ls开的,纷纷过来借书,自然就会出现供不应求的情况, 并且借书的过程类 ...
- 关于EasyRTSPClient、EasyPlayer RTSP流重连问题的解释
EasyPlayer.EasyRTSPClient是如何设计重连的 首先大概解释一下EasyRTSPClient与EasyPlayer间的关系:EasyRTSPClient是一个专门用于与RTSP流媒 ...
- Software-defined networking
Software-defined networking administrators to programmatically initialize, control, change, and mana ...
- cocos2d-js添加艾盟插屏(通过jsb反射机制)
1.导入jar包 2.修改AndroidManifest.xml文件 添加: <activity android:name="com.xingka ...
- 认识影片版本(CAM、TS、TC、DVD、HD、BD、TVRIP等)
许多朋友在下载电影的时候, 往往会被各种各样的版本标识弄糊涂,今天把各种版本的缩写收集在一起,希望对大家有所帮助 . 引用: 1.CAM(枪版) CAM 通常是用数码摄像机从电影院盗录.有时会使 ...