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之系统编程 --进程的更多相关文章

  1. linux系统编程-进程

    进程 现实生活中 在很多的场景中的事情都是同时进行的,比如开车的时候 手和脚共同来驾驶汽车,再比如唱歌跳舞也是同时进行的: 如下是一段视频,迈克杰克逊的一段视频: http://v.youku.com ...

  2. Linux系统编程@进程通信(一)

    进程间通信概述 需要进程通信的原因: 数据传输 资源共享 通知事件 进程控制 Linux进程间通信(IPC)发展由来 Unix进程间通信 基于System V进程间通信(System V:UNIX系统 ...

  3. Python之系统编程笔记

    概念 命令行工具. Shell 脚本.  系统管理 系统模块 sys   提供一组功能映射Python运行时的操作系统 os    提供跨平台可移植的操作系统编程接口   os.path 提供文件及目 ...

  4. linux服务器开发二(系统编程)--进程相关

    进程相关的概念 程序与进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(CPU.内存.打开的文件.设备.锁等等). 进程,是一个抽象的概念,与操作系统原理联系紧密.进程是活跃的程序,占用系 ...

  5. Linux系统编程@进程管理(一)

    课程目标: 构建一个基于主机系统的多客户即时通信/聊天室项目 涉及的理论知识 进程控制:僵尸进程/孤儿进程.进程控制.守护进程... 进程间通信:管道.命名管道.信号... 多线程编程: 锁.信号量. ...

  6. Python之网路编程进程理论基础

    背景知识 顾名思义,进程即一个软件正在进行的过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老的也是最重要的抽象概念之一.操作系统的其他 ...

  7. Linux系统编程@进程管理(二)

    1.创建守护进程(Deamon) 守护进程的概念与作用 后台服务程序 – 系统服务,进程名字往往以’d’结尾,生存周期比较长(系统装入时启动,关闭时候终止.系统装入两种启动方式:1从启动脚本.etc/ ...

  8. [linux] C语言Linux系统编程进程基本概念

    1.如果说文件是unix系统最重要的抽象概念,那么进程仅次于文件.进程是执行中的目标代码:活动的.生存的.运行的程序. 除了目标代码进程还包含数据.资源.状态以及虚拟化的计算机. 2.进程体系: 每一 ...

  9. Linux系统编程——进程替换:exec 函数族

    在 Windows 平台下,我们能够通过双击运行可运行程序,让这个可运行程序成为一个进程.而在 Linux 平台.我们能够通过 ./ 运行,让一个可运行程序成为一个进程. 可是.假设我们本来就执行着一 ...

随机推荐

  1. 朴素贝叶斯分类算法-----java

    1.贝叶斯分类的基础--贝叶斯定理 已知某条件概率.怎样得到两个事件交换后的概率,也就是在已知P(A|B)的情况下怎样求得P(B|A). 这里先解释什么是条件概率: 表示事件B已经发生的前提下,事件A ...

  2. Chrome自带恐龙小游戏的源码研究(四)

    在上一篇<Chrome自带恐龙小游戏的源码研究(三)>中实现了让游戏昼夜交替,这一篇主要研究如何绘制障碍物. 障碍物有两种:仙人掌和翼龙.仙人掌有大小两种类型,可以同时并列多个:翼龙按高. ...

  3. 研究下JavaScript中的Rest參数和參数默认值

    研究下JavaScript中的Rest參数和參数默认值 本文将讨论使 JavaScript 函数更有表现力的两个特性:Rest 參数和參数默认值. Rest 參数 通常,我们须要创建一个可变參数的函数 ...

  4. eclipse spring4 ehache2.10 整合

    http://blog.csdn.net/tonytfjing/article/details/39251507 http://my.oschina.net/duoduo3369/blog/17392 ...

  5. .net 平台下的AI框架

    Aforge.net之旅——开篇:从识别验证码开始 基于AForge.Net框架的扑克牌识别 人工神经网络入门(4) —— AFORGE.NET简介 .NET开源工程推荐(Accord,AForge, ...

  6. 【BZOJ4843】[Neerc2016]Expect to Wait 排序

    [BZOJ4843][Neerc2016]Expect to Wait Description ls最近开了一家图书馆,大家听说是ls开的,纷纷过来借书,自然就会出现供不应求的情况, 并且借书的过程类 ...

  7. 关于EasyRTSPClient、EasyPlayer RTSP流重连问题的解释

    EasyPlayer.EasyRTSPClient是如何设计重连的 首先大概解释一下EasyRTSPClient与EasyPlayer间的关系:EasyRTSPClient是一个专门用于与RTSP流媒 ...

  8. Software-defined networking

    Software-defined networking administrators to programmatically initialize, control, change, and mana ...

  9. cocos2d-js添加艾盟插屏(通过jsb反射机制)

    1.导入jar包 2.修改AndroidManifest.xml文件 添加:         <activity            android:name="com.xingka ...

  10. 认识影片版本(CAM、TS、TC、DVD、HD、BD、TVRIP等)

    许多朋友在下载电影的时候, 往往会被各种各样的版本标识弄糊涂,今天把各种版本的缩写收集在一起,希望对大家有所帮助 . 引用: 1.CAM(枪版)    CAM 通常是用数码摄像机从电影院盗录.有时会使 ...