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 平台.我们能够通过 ./ 运行,让一个可运行程序成为一个进程. 可是.假设我们本来就执行着一 ...
随机推荐
- python中给程序加锁之fcntl模块的使用
python 中给文件加锁——fcntl模块import fcntl 打开一个文件##当前目录下test文件要先存在,如果不存在会报错.或者以写的方式打开f = open('./test')对该文件加 ...
- 分区容量大于16TB的格式化
File systems do have limits. Thats no surprise. ext3 had a limit at 16 TB file system size. If you n ...
- C市现在要转移一批罪犯到D市,C市有n名罪犯,按照入狱时间有顺序,另外每个罪犯有一个罪行值,值越大罪越重。现在为了方便管理,市长决定转移入狱时间连续的c名犯人,同时要求转移犯人的罪行值之和不超过t,问有多少种选择的方式?
// ConsoleApplication12.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" // ConsoleApplication1 ...
- Zend API:深入 PHP 内核
Introduction Those who know don't talk. Those who talk don't know. Sometimes, PHP "as is" ...
- Linux 进程状态 说明
Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态. 在下文将对进程的 R.S.D.T.Z.X 六种状态做个说明. 进程状态: S ...
- 安装Redis 非结构化数据库
1.官网下载安装包 1) 首先在Redis官网下载安装包: http://redis.io/download(redis-4.0.9.tar.gz) 2.在/usr/local/创建一个redi ...
- python 基础 1.6 python 帮助信息及数据类型间相互转换
一. 帮助信息 # dir() 方法 查看函数的方法 # help() # type() 查看类型 name = raw_input('please input you name ...
- 设计TCP服务器的规则
设计TCP服务器,采用如下规则: 1.正等待连接请求的一端有一个固定长度的连接队列,该队列中的连接已被TCP接受(完成三次握手),但还没有被应用层接受.注意:TCP接受一个连接是将其放入这个队列,而应 ...
- WebApi基础
1:当Controller中有相同参数的方法时,请求调用会报错 [HttpGet] public IEnumerable<string> Resturn() { return new st ...
- 3行代码 多元线性方程组 rank=4 多元-一元 降元
对于线性方程组Ax=b 对A和b执行同样的一串行初等运算, 那么该方程组的解集不发生变化. [未知-已知 高阶--低阶] http://mathworld.wolfram.com/CramersR ...