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创建线程 三种方式的对比 引言 在日常开发工作中,多线程开发可以说是必备技能 ...
 
随机推荐
- OpenID Connect Core 1.0(六)使用隐式验证流
			
3.2 使用隐式验证流(Authentication using the Implicit Flow) 本节描述如何使用隐式流程执行验证.使用隐式流程时,所有令牌从授权终结点返回:不使用令牌终结点返回 ...
 - jdk 配置
			
JDK (绿色版) 此次安装的 JDK 版本为 1.8.0_77 步骤一: 拷贝 JDK(350M左右)到电脑 步骤二: 配置环境变量 JAVA_HOME , PATH , CLA ...
 - 修复 Cydia 不能上网的问题
			
使用 h3lix 越狱 10.3.3 的 iPhone5,进入 Cydia 不能联网解决方法:打开 Cydia,进入已安装列表,点击 Cydia Installer 卸载,然后看到桌面上就没有 Cyd ...
 - opacity(透明度)属性设置
			
1.opacity:是属性,整个元素包含子元素全部都会透明,取值范围0-1; 2.background-color:rgba(0,0,0,.5)rgba是值,用于背景,取值范围0-1. 补充:a-al ...
 - JavaScript入门学习(0)相关 软件工具
			
JavaScript本地脚本编辑工具(1st JavaScript Editor Pro ) 必要设置 https://pan.baidu.com/s/1XoaNA9o0qt2eJfLgoZ5 ...
 - s3c6410 RomCode文档读后总结
			
最近无意中看到一篇关于s3c6410 RomCode的介绍,结合自己的经验,做个总结. 首先贴张图,具体描述下该芯片的启动方式及具体流程. 因为s3c6410的板子多数是从SD或者Nand方式启动,重 ...
 - Vue2.5入门-1
			
vue如何引用和使用,实例和挂在点的介绍 <!DOCTYPE html> <html> <head> <title>vue 入门</title&g ...
 - 后台运行spark-submit命令的方法
			
在使用spark-submit运行工程jar包时常常会出现一下两个问题: 1.在程序中手打的log(如System.out.println(“***testRdd.count=”+testRdd.co ...
 - R语言(自定义函数、循环语句、管道函数)
			
学习R语言半年多了,以前比较注重统计方法上的学习,但是最近感觉一些基础知识也很重要.去年的参考资料是<R语言实战>,今年主要是看视频.推荐网易云课堂里的教程,很多资料都是很良心的~ 目前学 ...
 - java入门---修饰符&访问修饰符&非访问修饰符
			
Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符 修饰符用来定义类.方法或者变量,通常放在语句的最前端.我们通过下面的例子来说明: public class ...