Python并发进程—multiprocessing 模块创建进程

multiprocessing 模块创建进程

进程创建方法

1.流程特点
【1】 将需要子进程执行的事件封装为函数
【2】 通过模块的Process类创建进程对象,关联函数
【3】 可以通过进程对象设置进程信息及属性
【4】 通过进程对象调用start启动进程
【5】 通过进程对象调用join回收进程

2.基本接口使用

Process()

  • 功能 : 创建进程对象
  • 参数 : target 绑定要执行的目标函数
  •     rgs 元组,用于给target函数位置传参
  •     kwargs 字典,给target函数键值传参

p.start()

  • 功能 : 启动进程

注意:启动进程此时target绑定函数开始执行,该函数作为子进程执行内容,此时进程真正被创建

p.join([timeout])

  • 功能:阻塞等待回收进程
  • 参数:超时时间

注意

  • 使用multiprocessing创建进程同样是子进程复制父进程空间代码段,父子进程运行互不影响。
  • 子进程只运行target绑定的函数部分,其余内容均是父进程执行内容。
  • multiprocessing中父进程往往只用来创建子进程回收子进程,具体事件由子进程完成。
  • multiprocessing创建的子进程中无法使用标准输入

 1 import multiprocessing as mp
 2 from time import sleep
 3
 4 a = 1
 5
 6 def fun():
 7   print("开始一个新的进程")
 8   sleep(5)
 9   global  a
10   print("a = ",a)
11   a = 10000
12   print("子进程结束了")
13
14 # 创建进程对象
15 p = mp.Process(target = fun)
16 p.start()  # 启动进程
17
18 sleep(2)
19 print("父进程干点啥")
20
21 p.join(1) # 回收进程
22
23 print(‘a:‘,a)
24
25 # 等价于如下
26 # pid = os.fork()
27 # if pid == 0:
28 #   fun()
29 # else:
30 #   os.wait()

multiprocessing 示例1

 1 from multiprocessing import Process
 2 from time import sleep
 3 import os
 4
 5 def th1():
 6   sleep(3)
 7   print("吃饭")
 8   print(os.getppid(),‘---‘,os.getpid())
 9
10 def th2():
11   sleep(2)
12   print("睡觉")
13   print(os.getppid(),‘---‘,os.getpid())
14
15 def th3():
16   sleep(4)
17   print("打豆豆")
18   print(os.getppid(),‘---‘,os.getpid())
19
20 things = [th1,th2,th3]
21 jobs = []
22 for th in things:
23   p = Process(target = th)
24   p.start()
25   jobs.append(p)  # 将进程对象保存在列表
26
27 # 一起回收
28 for i in jobs:
29   i.join()

multiprocessing 示例2

 1 from multiprocessing import Process
 2 from time import sleep
 3
 4 # 带参数的进程函数
 5 def worker(sec,name):
 6   for i in range(3):
 7     sleep(sec)
 8     print("I‘m %s"%name)
 9     print("I‘m working ... ")
10
11 # p = Process(target=worker,args=(2,‘Baron‘))
12 p = Process(target = worker,args=(2,),
13             kwargs={‘name‘:‘Baron‘})
14 p.start()
15 p.join()

multiprocessing 示例3

3.进程对象属性

p.name 进程名称

p.pid 对应子进程的PID号

p.is_alive() 查看子进程是否在生命周期

p.daemon 设置父子进程的退出关系

  • 如果设置为True则子进程会随父进程的退出而结束
  • 要求必须在start()前设置
  • 如果daemon设置成True 通常就不会使用 join()

 1 from multiprocessing import Process
 2 from time import sleep,ctime
 3
 4 def tm():
 5   for i in range(3):
 6     sleep(2)
 7     print(ctime())
 8
 9 p = Process(target = tm,name = ‘Tedu‘)
10
11 p.daemon = True # 子进程会随父进程退出
12
13 p.start()
14 print("Name:",p.name)  # 名称
15 print("PID:",p.pid)  # PID
16 print("Is alive:",p.is_alive()) # 生命周期

进程对象属性示例

原文地址:https://www.cnblogs.com/maplethefox/p/10989150.html

时间: 2024-08-30 02:29:12

Python并发进程—multiprocessing 模块创建进程的相关文章

multiprocessing模块创建进程

一.multiprocessing模块介绍 python中的多线程无法利用CPU资源,在python中大部分情况使用多进程.python中提供了非常好的多进程包multiprocessing. multiprocessing模块用来开启子进程,并在子进程中执行功能(函数),该模块与多线程模块threading的编程接口类似. multiprocessing的功能众多:支持子进程.通信和共享数据.执行不同形式的同步,提供了Process.Queue.Pipe.Lock等组件. 二.Process类

使用multiprocessing模块创建多进程

1 # 使用multiprocessing模块创建多进程 2 # multiprcessing模块提供了一个Process类来描述一个进程对象. 3 # 创建子进程时,只需要传入一个执行函数和函数的参数,即可完成一个process实例的创建 4 # 用start()方法启动进程 5 # 用join()方法实现进程间的同步. 6 import os 7 from multiprocessing import Process 8 # os模块中的getpid()方法获取当前进程的id 9 # get

multiprocessing模块创建子进程

使用multiprocessing模块创建子进程有两种方法 1.用Process类创建子进程对象,然后用start()方法调用 from multiprocessing import Process import time def task(): print('son run') time.sleep(5) print('son over') if __name__ == '__main__': p=Process(target=task) 创建子进程对象参数target=函数名 time.sl

python的multiprocessing模块进程创建、资源回收-Process,Pool

python的multiprocessing有两种创建进程的方式,每种创建方式和进程资源的回收都不太相同,下面分别针对Process,Pool及系统自带的fork三种进程分析. 1.方式一:fork() 举例: 1 import os 2 pid = os.fork() # 创建一个子进程 3 os.wait() # 等待子进程结束释放资源 4 pid为0的代表子进程. 缺点:1.兼容性差,只能在类linux系统下使用,windows系统不可使用:2.扩展性差,当需要多条进程的时候,进程管理变得

python全栈开发基础【第二十篇】利用multiprocessing模块开进程

一.multiprocessing模块介绍 python中的多线程无法利用CPU资源(主要指计算密集型任务),在python中大部分情况使用多进程.python中提供了非常好的多进程包multiprocessing. multiprocessing模块用来开启子进程,并在子进程中执行功能(函数),该模块与多线程模块threading的编程接口类似. multiprocessing的功能众多:支持子进程.通信和共享数据.执行不同形式的同步,提供了Process.Queue.Pipe.Lock等组件

Python中subprocess 模块 创建并运行一个进程

python的subprocess模块,看到官方声明里说要尽力避免使用shell=True这个参数,于是测试了一下: from subprocess import call import shlex cmd = "cat test.txt; rm test.txt" call(cmd, shell=True) 运行之后: 1:打开并浏览了test.txt文件 2:删除了test.txt文件 from subprocess import call import shlex cmd = &

Python--线程队列(queue)、multiprocessing模块(进程对列Queue、管道(pipe)、进程池)、协程

队列(queue) 队列只在多线程里有意义,是一种线程安全的数据结构. get与put方法 ''' 创建一个"队列"对象 import queue q = queue.Queue(maxsize = 10) queue.Queue类即是一个队列的同步实现.队列长度可为无限或者有限.可通过Queue的构造函数的可选参数maxsize来设定队列长度.如果maxsize小于1就表示队列长度无限. 将一个值放入队列中: q.put() 调用队列对象的put()方法在队尾插入一个项目.put()

3 - 利用multiprocessing模块开进程

一.multiprocessing模块介绍 python中的多线程无法利用CPU资源,在python中大部分情况使用多进程.python中提供了非常好的多进程包multiprocessing. multiprocessing模块用来开启子进程,并在子进程中执行功能(函数),该模块与多线程模块threading的编程接口类似. multiprocessing的功能众多:支持子进程.通信和共享数据.执行不同形式的同步,提供了Process.Queue.Pipe.Lock等组件. 二.Process类

python多进程multiprocessing模块中Queue的妙用

最近的部门RPA项目中,小爬为了提升爬虫性能,使用了Python中的多进程(multiprocessing)技术,里面需要用到进程锁Lock,用到进程池Pool,同时利用map方法一次构造多个process.Multiprocessing的使用确实能显著提升爬虫速度,不过程序交由用户使用时,缺乏一个好的GUI窗口来显示爬虫进度.之前的文章中使用了Chrome浏览器来渲染js脚本生成了进度条.但是鉴于Chrome在运行时十分吃内存资源,用Chrome只是生成一个进度条难免有些“大材小用”,所以,小