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 平台.我们能够通过 ./ 运行,让一个可运行程序成为一个进程. 可是.假设我们本来就执行着一 ...
随机推荐
- Freebsd的ports命令
安装 make clean 卸载 make deinstall 重装 make reinstall 清理 make clean 列出配置单 make config 恢复默认的配置单 make rmco ...
- bit-map再显身手:test.txt中有42亿个无符号整数, 求不存在于test.txt中的最小无符号整数。限制: 可用内存为600MB.
先看看这个题目:test.txt中有42亿个无符号整数, 求不存在于test.txt中的最小无符号整数. 限制: 可用内存为600MB. 又是大数据. 看到42亿, 有灵感没? 要知道, 2的32次方 ...
- 解决Linux中文环境下astro和Calibre不能输入的问题
例如我的opensuse在中文环境下不能在astro中输入指令,Calibre的grid spacing设置框不能输入,经过摸索,找到以下两种解决方法: 1. 将系统环境变成英文,在.bashr ...
- LeetCode108_Convert SortedArray to BinarySearchTree(将有序数组转成二叉排序树) Java题解
题目: Given an array where elements are sorted in ascending order, convert it to a height balanced BST ...
- Unity3D研究院之Inspector视图中的get/set使用
get set 使用起来很方便,但是编辑时在Inspector视图中问题就来了,因为get/set的属性即使是public了,但是在Inspector视图中依然不显示..谷歌一下估计就是下面这样的答案 ...
- Windows下Nginx+Web.py+FastCGI服务搭建
在搭建之前,有必要了解下什么是fastcgi,但鉴于我自己也不大了解,这里就不搬门弄斧了,请参考各种百科和官网资料. 1.资源下载 python下载地址:戳这里webpy下载地址:戳这里flup下载地 ...
- 用apache做为代理下载本地pdf文件
有一些公司会用apache做为代理,下载服务器上的pdf文件.以下是apache做为代理的配置 一. 环境 centos6.5 192.168.69.3 二. yum安装apache 服务 [zxj ...
- sql查询的日期判断问题
在SQLSERVE中,如果某个数据表的类型被定义成datetime类型,那么数据是包含秒的.这时候如何查询某天的数据呢?新手们可能想:最直接的做法是把时间部分去掉,只取日期部分.于是日期的函数就用上了 ...
- 一些重要的地址:md5在线解密破解
md5在线解密破解:https://www.cmd5.com/
- 10分钟看懂, Java NIO 底层原理
目录 写在前面 1.1. Java IO读写原理 1.1.1. 内核缓冲与进程缓冲区 1.1.2. java IO读写的底层流程 1.2. 四种主要的IO模型 1.3. 同步阻塞IO(Blocking ...