python创建进程的方法(Python多进程fork函数详解)
python创建进程的方法
Python多进程fork函数详解进程
进程是程序的一次动态执行过程,它对应了从代码加载、执行到执行完毕的一个完整过程。进程是系统进行资源分配和调度的一个独立单位。进程是由代码(堆栈段)、数据(数据段)、内核状态和一组寄存器组成。
在多任务操作系统中,通过运行多个进程来并发地执行多个任务。由于每个线程都是一个能独立执行自身指令的不同控制流,因此一个包含多个线程的进程也能够实现进程内多任务的并发执行。
进程是一个内核级的实体,进程结构的所有成分都在内核空间中,一个用户程序不能直接访问这些数据。
进程的状态:
创建、准备、运行、阻塞、结束。
进程间的通信方式可以有:
- 文件
- 管道
- 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类来创建一个新的进程对象。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对开心学习网的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://blog.csdn.net/SeeTheWorld518/article/details/49639247
- python批量注册(python实现批量注册网站用户的示例)
- python 获取数组任意组合(Python实现求两个数组交集的方法示例)
- python模块使用方法(详解python的argpare和click模块小结)
- python爬虫并保存excel实例(Python实现爬取亚马逊数据并打印出Excel文件操作示例)
- python核心编程和python基础教程(从0开始的Python学习014面向对象编程推荐)
- python网页自动化selenium(python利用selenium进行浏览器爬虫)
- pythonopt用法(Python语言检测模块langid和langdetect的使用实例)
- python中的eval函数的用法(Python eval的常见错误封装及利用原理详解)
- python怎么从数组中取内容(python调用c++ ctype list传数组或者返回数组的方法)
- python实用教程(Python简直是万能的,这5大主要用途你一定要知道!推荐)
- python3.9.1如何安装模块(Python3.6中Twisted模块安装的问题与解决)
- pythonrequests爬虫使用教程(Python 通过requests实现腾讯新闻抓取爬虫的方法)
- pythonindex函数用法(python sort、sort_index方法代码实例)
- python 模式识别(python实现全盘扫描搜索功能的方法)
- pythonlambda详解(Python的条件表达式和lambda表达式实例)
- python面向对象练习方法(Python面向对象实现一个对象调用另一个对象操作示例)
- 关于队徽 你了解这些么 二(关于队徽你了解这些么)
- 冬天来了手脚冰凉 真不是因为上辈子你是折翼的天使(冬天来了手脚冰凉)
- 0 1 岁婴儿最强作息指南,照着做养出天使宝宝(01岁婴儿最强作息指南)
- 沪上这16所高校 萌新 礼包开箱 哪一款让你心动(沪上这16所高校萌新)
- 她救了被绑架的他,而这一切竟是一场阴谋...(她救了被绑架的他)
- 冬季养殖这6种阴生植物,方便又好养,你家有么(冬季养殖这6种阴生植物)
热门推荐
- javascript设置鼠标(JavaScript实现鼠标控制自由移动的窗口)
- docker容器连接宿主机(docker 实现容器与宿主机无缝调用shell命令)
- amazonawslinux服务器设置(如何在AWS EC2的Linux服务器上开放一个端口)
- 如何使用html5的canvas图(html5 canvas实现给图片添加平铺水印)
- docker 限制cpu使用率(docker CPU限制的实现)
- sqlserver字符串格式化(SQL server中字符串逗号分隔函数分享)
- 云服务器模式有哪些(私人云服务器用途有哪些?私人云服务器可以做什么?)
- 阿里云ecs集群怎么设置(“阿里云ECS服务器”使用别家CDN防护怎么设置IP白名单?)
- phpredis怎么设置队列(php使用lua+redis实现限流,计数器模式,令牌桶模式)
- dedecms怎么加页面(dedecms自定义内容模型在首页、列表页及内容调用标签的方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9