python ---多进程 Multiprocessing

和 threading 的比较

多进程 Multiprocessing 和多线程 threading 类似, 他们都是在 python 中用来并行运算的. 不过既然有了 threading,

为什么 Python 还要出一个 multiprocessing 呢? 原因很简单, 就是用来弥补 threading 的一些劣势, 比如在 threading 教程中提到的GIL.

创建多进程

import multiprocessing as mp
import threading as td

def job(a,b):
    print(a,b)

t1 = td.Thread(target=job,args=(1,2))
p1 = mp.Process(target=job,args=(1,2))

p1.start()

结果保存在mp.queue里

queue模块实现了面向多生产线程、多消费线程的队列,

multiprocessing.queue模块实现了面向多成产进程、多消费进程的队列

Queue.Queue是进程内非阻塞队列。多进程各自私有

multiprocess.Queue是跨进程通信队列。各子进程共有。

 1 import multiprocessing as mp
 2 import threading as td
 3
 4 def job(q):
 5     res = 0
 6     for i in range(1000):
 7         res+=i+i**2+i**3
 8     q.put(res)
 9
10
11 q = mp.Queue()
12 p1 = mp.Process(target=job,args=(q,))
13 p2 = mp.Process(target=job,args=(q,))
14 p1.start()
15 p2.start()
16 p1.join()
17 p2.join()
18 res1 = q.get()
19 res2 = q.get()
20 print(res1+res2)

进程池pool

https://stackoverflow.com/questions/8533318/multiprocessing-pool-when-to-use-apply-apply-async-or-map

 1 import multiprocessing as mp
 2
 3 def job(x):
 4     return x*x
 5 pool = mp.Pool()
 6
 7 pool = mp.Pool()
 8 res = pool.map(job, range(10))
 9 print(res)
10
11
12
13 res = pool.apply_async(job, (2,))
14 # 用get获得结果
15 print(res.get())

定义共享内存

其中di参数用来设置数据类型的,d表示一个双精浮点类型,i表示一个带符号的整型。

import multiprocessing as mp

value1 = mp.Value(‘i‘, 0)
value2 = mp.Value(‘d‘, 3.14)

这里的Array和numpy中的不同,它只能是一维的,不能是多维的。同样和Value 一样,需要定义数据形式,否则会报错。

array = mp.Array(‘i‘, [1, 2, 3, 4])

https://docs.python.org/3/library/array.html

加锁

 1 import multiprocessing as mp
 2
 3 def job(v,num,lock):
 4     lock.acquire() # 锁住
 5     for _ in range(10):
 6         time.sleep(0.1)
 7         v.value +=1
 8         print(v.value)
 9     lock.release()
10
11
12 l = mp.Lock() # 定义一个进程锁
13 v = mp.Value(‘i‘, 0) # 定义共享内存
14 p1 = mp.Process(target=job, args=(v,1,l)) # 需要将lock传入
15 p2 = mp.Process(target=job, args=(v,3,l))
16 p1.start()
17 p2.start()
18 p1.join()
19 p2.join()

原文地址:https://www.cnblogs.com/zle1992/p/10252730.html

时间: 2024-08-06 12:18:35

python ---多进程 Multiprocessing的相关文章

Python多进程multiprocessing(二)

紧接上文 在上文Python多进程multiprocessing(一)中我们介绍了多进程multiprocessing的部分基础操作,在本文中,我们将继续介绍关于多进程的一些知识,比如进程池Pool这个有用的东东.马上开始吧! 使用实例 实例1 import multiprocessing as mp def job(x): return x*x def multicore(): pool = mp.Pool(processes=2) res = pool.map(job,range(10))

python多进程-----multiprocessing包

multiprocessing并非是python的一个模块,而是python中多进程管理的一个包,在学习的时候可以与threading这个模块作类比,正如我们在上一篇转载的文章中所提,python的多线程并不能做到真正的并行处理,只能完成相对的并发处理,那么我们需要的就是python的多进程来完成并行处理,把所有的cpu资源都利用起来.multiprocessing的很大一部分与threading使用同一套API,只不过换到了多进程的环境.这里面要注意,对于多进程来说,win32平台和unix平

Python多进程multiprocessing使用示例

mutilprocess简介 像线程一样管理进程,这个是mutilprocess的核心,他与threading很是相像,对多核CPU的利用率会比threading好的多. import multiprocessing def worker(num): """thread worker function""" print 'Worker:', num return if __name__ == '__main__': jobs = [] for i

python多进程multiprocessing Pool相关问题

python多进程想必大部分人都用到过,可以充分利用多核CPU让代码效率更高效. 我们看看multiprocessing.pool.Pool.map的官方用法 map(func, iterable[, chunksize]) A parallel equivalent of the map() built-in function (it supports only one iterable argument though). It blocks until the result is ready

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

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

Python多进程multiprocessing

import multiprocessing import time # 具体的处理函数,负责处理单个任务 def func(msg): # for i in range(3): print (msg) time.sleep(1) return "done " + msg if __name__ == "__main__": # 进程池,创建多个进程,并行执行 pool = multiprocessing.Pool(processes=4) # 把运行的结果添加到一

python 多进程multiprocessing 模块

multiprocessing 常用方法: cpu_count():统计cpu核数 multiprocessing.cpu_count() active_children() 获取所有子进程 multiprocessing.active_children() preces() 创建一个进程对象 multiprocessing.Preces(target=function_name, args=()) target: 函数名 args: 函数需要的参数,以tuple形式传入,一个参数时需(1,)

python多进程(multiprocessing调用类函数)

#coding=utf-8 import os import multiprocessing from time import ctime, sleep from selenium import webdriver class testClass(object): def worker(self, interval, browser="Chrome", url="http://loginurl"): driver = eval("webdriver.%s(

python多进程——multiprocessing.Process

简介 multiprocessing是一个使用类似于threading模块的API支持生成进程的包.该multiprocessing软件包提供本地和远程并发.因此,该multiprocessing模块允许程序员充分利用给定机器上的多个处理器.可以在Unix和Windows上运行. multipleprocessing文档 Process(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None) 应该始终使用关键