Python多进程fork()函数详解


Posted in Python onFebruary 22, 2019

进程

进程是程序的一次动态执行过程,它对应了从代码加载、执行到执行完毕的一个完整过程。进程是系统进行资源分配和调度的一个独立单位。进程是由代码(堆栈段)、数据(数据段)、内核状态和一组寄存器组成。

在多任务操作系统中,通过运行多个进程来并发地执行多个任务。由于每个线程都是一个能独立执行自身指令的不同控制流,因此一个包含多个线程的进程也能够实现进程内多任务的并发执行。

进程是一个内核级的实体,进程结构的所有成分都在内核空间中,一个用户程序不能直接访问这些数据。

进程的状态:

创建、准备、运行、阻塞、结束。

进程间的通信方式可以有:

  • 文件
  • 管道
  • socket
  • 信号
  • 信号量
  • 共享内存

要让Python程序实现多进程(multiprocessing),必须先了解操作系统的相关知识。

在Unix/Linux操作系统提供了一个fork()函数,它非常特殊,调用一次,返回两次,因为操作系统将当前的进程(父进程)复制了一份(子进程),然后分别在父进程和子进程内返回。

Python中的进程

  • os.fork()
  • subprocess
  • processing
  • multiprocessing

fork()函数

函数原型:

Help on built-in function fork in module posix:
fork(...)
  fork() -> pid
  Fork a child process.
  Return 0 to child process and PID of child to parent process.

从fork()函数原型来看,它也属于一个内建函数。

子进程永远返回0,而父进程返回子进程的ID。这样做的理由是,一个父进程可以fork()出很多子进程,所以,父进程要记下每个子进程的ID,而子进程只需要调用getppid()就可以拿到父进程的ID。

Python的进程函数fork()是在os模块,下面是一个关于进程的例子:

import os
print os.getpid() #获取子进程的进程号
pid = os.fork()
if pid == 0 :
 print 'I am child process (%s) and my parent is %s.' % (os.getpid(), os.getppid())
else :
 print 'I (%s) just created a child process (%s).' % (os.getpid(), pid)

执行结果:

1526
I (1526) just created a child process (1527).
I am child process (1527) and my parent is 1526.

有了fork调用,一个进程在接到新的任务时,就可以复制出一个子进程来处理新任务。常见的Apache服务器就是由父进程监听端口,一旦有新的http请求时,就fork出子进程来处理新的http请求。

再看一个例子:

#coding=utf-8
import os
os.fork()
print 1

执行结果:

1
1

程序中,父进程中创建了一个子进程,子进程运行打印了一个1,回到父进程又打印了一个1,所以结果是打印了2个1。

需要注意的是,上面创建进程的函数都是Unix/Linux下的,Windows下是没有的,那在Windows下又使用什么实现多进程呢?

由于Python是跨平台的,自然也应该提供一个跨平台的多进程支持。multiprocessing模块就是跨平台版本的多进程模块, 支持子进程、通信和共享数据、执行不同形式的同步。

multiprocessing模块提供了一个Process类来创建一个新的进程对象。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
python编程-将Python程序转化为可执行程序[整理]
Apr 09 Python
Python 的内置字符串方法小结
Mar 15 Python
浅谈python socket函数中,send与sendall的区别与使用方法
May 09 Python
Python设计模式之观察者模式简单示例
Jan 10 Python
python学生信息管理系统
Mar 13 Python
django静态文件加载的方法
May 20 Python
Python实现图片添加文字
Nov 26 Python
python无序链表删除重复项的方法
Jan 17 Python
python编写俄罗斯方块
Mar 13 Python
Python打印不合法的文件名
Jul 31 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
Mar 03 Python
Python关于OS文件目录处理的实例分享
May 23 Python
Django restframework 源码分析之认证详解
Feb 22 #Python
运用Python的webbrowser实现定时打开特定网页
Feb 21 #Python
Python3爬虫之自动查询天气并实现语音播报
Feb 21 #Python
python 自动批量打开网页的示例
Feb 21 #Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
Feb 21 #Python
Python利用itchat库向好友或者公众号发消息的实例
Feb 21 #Python
python使用wxpy轻松实现微信防撤回的方法
Feb 21 #Python
You might like
php empty() 检查一个变量是否为空
2011/11/10 PHP
PHP curl 并发最佳实践代码分享
2012/09/05 PHP
php自定义的格式化时间示例代码
2013/12/05 PHP
PHP写的资源下载防盗链类分享
2014/05/12 PHP
php一行代码获取文件后缀名实例分析
2014/11/12 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
2015/04/15 PHP
php处理复杂xml数据示例
2016/07/11 PHP
php中引用符号(&)的使用详细介绍
2016/12/06 PHP
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
js禁止小键盘输入数字功能代码
2011/08/01 Javascript
JavaScript 布尔操作符解析  && || !
2012/08/10 Javascript
Yii-自定义删除确认弹框(zyd)jquery实现代码
2013/03/04 Javascript
JavaScript 和 Java 的区别浅析
2013/07/31 Javascript
JScript分割字符串示例代码
2013/09/04 Javascript
js处理php输出时间戳对不上号的解决方法
2014/06/20 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
jQuery图片旋转插件jQueryRotate.js用法实例(附demo下载)
2016/01/21 Javascript
JS中mouseover和mouseout多次触发问题如何解决
2016/06/06 Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
vue.js实现简单轮播图效果
2017/10/10 Javascript
javascript自定义事件功能与用法实例分析
2017/11/08 Javascript
Vue2.0系列之过滤器的使用
2018/03/01 Javascript
简述JS浏览器的三种弹窗
2018/07/15 Javascript
vue router总结 $router和$route及router与 router与route区别
2019/07/05 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
Vant+postcss-pxtorem 实现浏览器适配功能
2021/02/05 Javascript
Python自定义函数的创建、调用和函数的参数详解
2014/03/11 Python
python中日志logging模块的性能及多进程详解
2017/07/18 Python
Python实现查找字符串数组最长公共前缀示例
2019/03/27 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
全球立体声:World Wide Stereo
2018/09/29 全球购物
3.12植树节活动总结2014
2014/03/13 职场文书
单位员工收入证明样本
2014/10/09 职场文书
三严三实心得体会范文
2014/10/13 职场文书
掌握这项技巧,一年阅读300本书不是梦
2019/09/12 职场文书