Python_进程(一)
来源:互联网 发布:dt大数据 编辑:程序博客网 时间:2024/05/17 22:07
前言:当你的女朋友喊你去逛街,而你现在正在开开心心的打游戏,作为游戏迷的你是不是非常的苦恼呢。如果自己会分身术多好,一个陪女朋友逛街,一个打游戏。既不惹女朋友生气,又能打游戏,既高效,又节省时间。
虽然在现实世界中不能做到,但是在代码的世界里这个可以做到。
fork分身术(fork进程)
在Python中的os模块中封装了系统常用的系统调用,当然fork也在其中。使用fork可以轻松的创建子进程。
需要注意的是fork函数 只能在mac、unix、linux上运行在windows上不能。
import osimport timepid = os.fork()if pid ==0: while 1: print("1") time.sleep(1)else: while 1: print("2") time.sleep(1)显示结果是
1和2 同时打印出来。这就是使用fork函数创建了一个子进程
注意:
1、程序执行到os.fork()时,操作系统会创建一个新的进程(子进程),然后复制父进程中所有的信息到子进程中。
2、父进程、子进程都会从fork函数中得到一个返回值,在子进程中这个值一定是0,而父进程中是子进程的id号。
3、fork()函数调用一次,返回两次,分别返回给父进程、子进程。
4、子进程永远返回0,父进程返回子进程的id。因为一个父进程可以创建很多子进程,所以父进程要记录下每个子进程的ID,而子进程只需要使用getppid()就可以拿到父进程的ID。
下面的代码演示(创建两个进程)
import ospid =os.fork()if pid==0: print("我是子进程%s,我的父进程是%s"%(os.getpid(),os.getppid()))else: print("我是父进程%s,我的子进程是%s" % (os.getpid(), pid))
创建多个fork
import ospid =os.fork()if pid==0: print("1")else: print("2")pid =os.fork()if pid==0: print("11")else: print("22")输出结果:
2
1
22
22
11
11
输出结果和你想象中的一样么?
如果不明白请看下面这张图
现在已经是4个进程。
fork炸弹
import oswhile 1: os.fork()使用while 1创建无限循环来让fork创建进程,最终会导致程序崩溃。
进程的回收os.wait()
使用os.wait()方法用来回收子进程占用的资源
import ospid =os.fork()if pid==0: print("我是子进程%s,我的父进程是%s"%(os.getpid(),os.getppid()))else: print("我是父进程%s,我的子进程是%s" % (os.getpid(), pid)) pid,result = os.wait() print("父进程回收的子进程pid:%s, result:%s" % (pid, result)) print("回收完成")
wait()会有两个返回值:1、子进程的编号。2、子进程退出时的状态(0表示正常退出)
多进程修改全局变量
import osNUM = 1pid = os.fork()if pid ==0: NUM+=1 print(NUM)else: NUM += 2 print(NUM)输出结果
3
2
在多进程中,每个进程的所有数据包括全局变量都各自拥有一份,互不影响。
阅读全文
0 0
- Python_进程(一)
- Python_进程(二)
- python_基础(一)字典
- python_面向对象(一)
- python_正则表达式(一)基础标识符
- Python_装饰器(一)原理篇
- Python_进程池
- Python_进程_线程篇
- python_函数(二)
- python_
- Python_金山词霸每日一句接口调用(可播放音频)
- 进程概述(进程一)
- Python_高级函数(1)
- Python_高级函数(2)
- python_面向对象(初始)
- python_面向对象(二)
- 关于进程(一)
- 进程管理(一)
- pandas库操作
- 自己封装的javascript工具类bee.js
- 直接插入排序
- Spring boot + Spring Security CSS静态资源拦截问题
- MySQL学习笔记13分组复制相关概念
- Python_进程(一)
- spring整合kafka项目生产和消费测试结果记录(一)
- 存储过程基础知识汇总
- leetcode java 实现String to Integer
- 求包含a~z中多个字符的字符串中重复出现最多的字母及次数问题
- luogu P3613 睡觉困难综合征
- STM32F103RC单片机ADC中的间断模式(Discontinous mode)的使用
- 免费论文查重
- ggplot2:bar-数值型(连续型)变量处理