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 平台.我们能够通过 ./ 运行,让一个可运行程序成为一个进程. 可是.假设我们本来就执行着一 ...
随机推荐
- rst2pdf 中文
上篇说到用pandoc转换为reST为pdf是使用LaTeX作为中间格式的,而今天要说的rst2pdf貌似是直接转换为pdf的. 安装和调用 rst2pdf目前只支持Python2.7,因此在创建vi ...
- items" does not support runtime expression
<%@taglib prefix="c" uri="http://java.sun.com/jstl/core"%> 更改为 <%@tagl ...
- PHP中输出文件,怎么区别什么时候该用readfile() , fread(), file_get_contents(), fgets()
我在服务器端(Apache环境)上放了一个安卓apk安装包的下载链接,使用readfile()读取apk文件输出下载后,手机安装apk显示解析包错误.但apk本身没问题,下载后文件的大小也是完整的.服 ...
- linux下安装go
在centOS下,安装go的环境,如下: 下载压缩包,wget https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz 解压该文件 ...
- Drupal 主题的表现形式
1.template.php /** * Implements hook_theme(). */ function yourtheme_theme($existing, $type, $theme ...
- ASP.NET动态网站制作(8)-- JS(3)
前言:JS的第三节课,这节课主要讲函数.对象及方法. 内容: 1.九九乘法表例子: HTML代码: <!DOCTYPE html> <html xmlns="http:// ...
- 仿易讯clientloading效果
以下来实现一个loading效果.详细效果例如以下: 首先对这个效果进行拆分,它由以下部分组成: 1 一个"闪电"样式的图案. 2 "闪电"图案背后是一个圆角矩 ...
- 各种RTMP直播流播放权限_音视频_数据花屏_问题检测与分析工具EasyRTMPClient
之前的一篇博客<网络摄像机IPCamera RTSP直播播放网络/权限/音视频数据/花屏问题检测与分析助手EasyRTSPClient>,我们介绍了RTSP流的检测和分析工具EasyRTS ...
- power law 幂定律
y=cx∧a 卖品销量排名与销量
- mysql系列之3.mysql进阶
启动原理 mysqld脚本-->mysqld_safe脚本-->mysqld服务-->启动mysql 强制关闭mysql: 三种方法, 不建议用! killall mysqld pk ...