python-创建进程的三种方式
1,os.fork() 方法
import os
ret = os.fork()
if ret == 0:
#子进程
print("Sub process pid = %d, Sub process ppid = %d" % (os.getpid(), os.getppid()))
else:
#父进程
print("Parent Process ret = %d" % ret)
print("Parent Process pid = %d" % os.getpid())
在该方法中,执行os.fork()会再创建一个进程,原进程(父进程)返回一个大于零的值(即ret > 0),这个值恰好是子进程的pid;而创建的新进程会返回零(即ret = 0)。
fork炸弹:在用户输入栏输入:
while True:
os.fork()
设备内存就会很快被塞满,然后down掉。
2,Process方法
from multiprocessing import Process
def func():
print("i am subprocess")
new_process = Process(tartget=func)
print("i am Parent Process")
Process方法需要指定一个函数,且父进程会等待子进程结束。另外可以新建一个example类继承Process类,然后重写__init__和run()函数,之后调用example.start(),它就会自动执行run()函数。
3,Pool方法
from multiprocessing import Pool
import time
def worker(x):
for j in range(1, 11):
print("%d:%d" % (x, j))
time.sleep(1)
pool = Pool(3) # run 3 process simultaneously
for i in range(1, 11):
print(i)
pool.apply_async(worker, (i,))
print("---start---")
pool.close() # 关闭进程池,不允许继续添加进程
pool.join() # 等待进程池中的所有进程结束
print("---end---")
Pool方法即进程池,需要说明有几个进程同时运行。在使用apply_async方法时第一个参数是函数名,第二个参数需要输入一个元组。在示例代码中,进程池同时允许三个进程运行,另外七个进程排队等候,当第一批的三个进程执行完后,第二批的三个再执行。所以进程池相当于起到了缓冲的作用。
实际上,在进程池的方式中,父进程基本上只需要等待子进程执行(使用pool.join()进行等待),任务都是交给子进程执行的。
python-创建进程的三种方式的更多相关文章
- Python—创建进程的三种方式
方式一:os.fork() 子进程是从os.fork得到的值,然后赋值开始执行的.即子进程不执行os.fork,从得到的值开始执行. 父进程中fork之前的内容子进程同样会复制,但父子进程空间独立,f ...
- python实现进程的三种方式及其区别
在python中有三种方式用于实现进程 多进程中, 每个进程中所有数据( 包括全局变量) 都各有拥有⼀份, 互不影响 1.fork()方法 ret = os.fork() if ret == 0: # ...
- python创建进程的两种方式
1.方式1 import time import multiprocessing def task(arg): time.sleep(2) print(arg) def run(): # 进程1 p1 ...
- python创建字典的三种方式
创建空字典: dict_eq={} print(type(dict)) 直接赋值创建字典: dict_eq={'a':1,'b':2,'c':'adbc'} 通过关键字dict和关键字参数创建 dic ...
- python核心高级学习总结3-------python实现进程的三种方式及其区别
python实现进程的三种方式及其区别 在python中有三种方式用于实现进程 多进程中, 每个进程中所有数据( 包括全局变量) 都各有拥有⼀份, 互不影响 1.fork()方法 ret = os.f ...
- python实现单例模式的三种方式及相关知识解释
python实现单例模式的三种方式及相关知识解释 模块模式 装饰器模式 父类重写new继承 单例模式作为最常用的设计模式,在面试中很可能遇到要求手写.从最近的学习python的经验而言,singlet ...
- 0036 Java学习笔记-多线程-创建线程的三种方式
创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...
- js学习-DOM之动态创建元素的三种方式、插入元素、onkeydown与onkeyup两个事件整理
动态创建元素的三种方式: 第一种: Document.write(); <body> <input type="button" id="btn" ...
- spring创建bean的三种方式
spring创建bean的三种方式: 1通过构造方法创建bean(最常用) 1.1 spring默认会通过无参构造方法来创建bean,如果xml文件是这样配置,则实体类中必须要有无参构造方法,无参构造 ...
- Java并发编程:Java创建线程的三种方式
目录 引言 创建线程的三种方式 一.继承Thread类 二.实现Runnable接口 三.使用Callable和Future创建线程 三种方式的对比 引言 在日常开发工作中,多线程开发可以说是必备技能 ...
随机推荐
- linux下安装perl
1.在官网 http://www.perl.org/get.html 下载perl安装包 2.上传服务器并解压 3../Configure -des -Dprefix=安装目录 4.make&am ...
- java ssm 后台框架平台 项目源码 websocket 即时通讯 IM quartz springmvc
官网 http://www.fhadmin.org/D 集成安全权限框架shiro Shiro 是一个用 Java 语言实现的框架,通过一个简单易用的 API 提供身份验证和授权,更安全,更可靠E ...
- TestNG+Maven+IDEA 自动化测试(一) 环境搭建
示例代码: https://github.com/ryan255/TestNG-Demo 所需环境: 1. IDEA UItimate 2. JDK 3. Maven 创建工程 一开始创建一个普通的m ...
- JS常见算法题目
最近收集了几个经典JS题目,比较有代表性,分享一下: 1.xiaoshuo-ss-sfff-fe 变为驼峰xiaoshuoSsSfffFe function getCamelCase(str ...
- 【TOJ 1072】编辑距离(动态规划)
描述 假设字符串的基本操作仅为:删除一个字符.插入一个字符和将一个字符修改成另一个字符这三种操作. 我们把进行了一次上述三种操作的任意一种操作称为进行了一步字符基本操作. 下面我们定义两个字符串的编辑 ...
- 11JavaScript事件
JavaScript 事件 HTML 事件是发生在 HTML 元素上的事情. 当在 HTML 页面中使用 JavaScript 时, JavaScript 可以触发这些事件. 1.HTML 事件 HT ...
- html中如何移除video下载按钮
我发现部分安卓手机使用video标签播放视频的时候会自带一个下载按钮,一般产品大多都不需要这一功能,那如何屏蔽下载按钮呢?有下面两种,请一定使用第一种方式,使用css控制会有兼容性问题,建议不要使用这 ...
- PHP代码优化—getter 和 setter
PHP中要实现类似于Java中的getter和setter有多种方法,比较常用的有: 直接箭头->调用属性(最常用),不管有没有声明这个属性,都可以使用,但会报Notice级别的错误 $dog ...
- 回文词 (Palindromes,Uva401)
例题 3-3 回文词 (Palindromes,Uva401) 输入一个字符中,判断它是否为回文串以及镜像串.输入字符串保证不含数字0.所谓回文串,就是反转以后和原串相同,如abba和madam.所有 ...
- 微信小程序真机预览跟本地不同的问题。原文地址:https://blog.csdn.net/qq_27187991/article/details/69664247/
微信小程序中出现最多的一个问题,就是真机跟本地不同:我简单列举一些我发现的原因,给大家参考,大家也可以把自己发现的东西回复给我,给我参考: 本地看不到数据,就先让本地能看到数据,再看本帖....特别提 ...