简单谈谈python中的多进程

 更新时间:2016年11月06日 11:15:03   作者:黑白子  
multiprocessing模块是python库中最高级和功能最强大的模块之一。本文就来给大家简单讲讲multiprocessing一般性技巧

进程是由系统自己管理的。

1:最基本的写法

from multiprocessing import Pool

def f(x):
  return x*x

if __name__ == '__main__':
  p = Pool(5)
  print(p.map(f, [1, 2, 3]))
[1, 4, 9]

2、实际上是通过os.fork的方法产生进程的

unix中,所有进程都是通过fork的方法产生的。

multiprocessing Process
os

info(title):
  title
  , __name__
  (os, ): , os.getppid()
  , os.getpid()

f(name):
  info()
  , name

__name__ == :
  info()
  p = Process(=f, =(,))
  p.start()
  p.join()

3、线程共享内存

threading

run(info_list,n):
  info_list.append(n)
  info_list

__name__ == :
  info=[]
  i ():
    p=threading.Thread(=run,=[info,i])
    p.start()
[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6, 7]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

进程不共享内存:

multiprocessing Process
run(info_list,n):
  info_list.append(n)
  info_list

__name__ == :
  info=[]
  i ():
    p=Process(=run,=[info,i])
    p.start()
[1]
[2]
[3]
[0]
[4]
[5]
[6]
[7]
[8]
[9]

若想共享内存,需使用multiprocessing模块中的Queue

multiprocessing Process, Queue
f(q,n):
  q.put([n,])

__name__ == :
  q=Queue()
  i ():
    p=Process(=f,=(q,i))
    p.start()
  :
    q.get()

4、锁:仅是对于屏幕的共享,因为进程是独立的,所以对于多进程没有用

multiprocessing Process, Lock
f(l, i):
  l.acquire()
  , i
  l.release()

__name__ == :
  lock = Lock()

  num ():
    Process(=f, =(lock, num)).start()
hello world 0
hello world 1
hello world 2
hello world 3
hello world 4
hello world 5
hello world 6
hello world 7
hello world 8
hello world 9

5、进程间内存共享:Value,Array

multiprocessing Process, Value, Array

f(n, a):
  n.value = i ((a)):
    a[i] = -a[i]

__name__ == :
  num = Value(, )
  arr = Array(, ())

  num.value
  arr[:]

  p = Process(=f, =(num, arr))
  p.start()
  p.join()
0.0
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
3.1415927
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

#manager共享方法,但速度慢

multiprocessing Process, Manager

f(d, l):
  d[] = d[] = d[] = l.reverse()

__name__ == :
  manager = Manager()

  d = manager.dict()
  l = manager.list(())

  p = Process(=f, =(d, l))
  p.start()
  p.join()

  d
  l
# print '-------------'这里只是另一种写法
# print pool.map(f,range(10))
{0.25: None, 1: '1', '2': 2}
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

#异步:这种写法用的不多

multiprocessing Pool
time
f(x):
  x*x
  time.sleep()
  x*x

__name__ == :
  pool=Pool(=)
  res_list=[]
  i ():
    res=pool.apply_async(f,[i])  res_list.append(res)

  r res_list:
    r.get(timeout=10) #超时时间

同步的就是apply

相关文章

  • Python Excel操作从零学习掌握openpyxl用法

    Python Excel操作从零学习掌握openpyxl用法

    这篇文章主要为大家介绍了Python Excel操作从零学习掌握openpyxl用法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Python把excel文件数据转化为字典格式存储详解

    Python把excel文件数据转化为字典格式存储详解

    这篇文章主要介绍了Python把excel文件数据转化为字典格式存储详解,在Python中有时候需要操作excel表格的数据,把excel表格转化为字典存起来,方便读取,今天我们就来看看如何转换,需要的朋友可以参考下
    2023-08-08
  • python爬虫看看虎牙女主播中谁最“顶”步骤详解

    python爬虫看看虎牙女主播中谁最“顶”步骤详解

    这篇文章主要介绍了python爬虫看看虎牙女主播中谁最“顶”,本文分步骤通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 基于Python制作一个图片色卡提取器

    基于Python制作一个图片色卡提取器

    在一些特殊的业务场景中,我们需要一次性提取一张图片中的色卡信息,并且需要使用十六进制的颜色表示方法进行展示。本文就来用Python做个图片色卡提取器,感兴趣的可以尝试一下
    2022-12-12
  • python使用requests库提交multipart/form-data请求的方法详解

    python使用requests库提交multipart/form-data请求的方法详解

    multipart/form-data的基础是post请求,即基于post请求来实现的 ,下面这篇文章主要给大家介绍了关于python使用requests库提交multipart/form-data请求的相关资料,需要的朋友可以参考下
    2023-01-01
  • Django中URL视图函数的一些高级概念介绍

    Django中URL视图函数的一些高级概念介绍

    这篇文章主要介绍了Django中URL视图函数的一些高级概念,Django是Python重多人气框架中最为著名的一个,需要的朋友可以参考下
    2015-07-07
  • python 反编译exe文件为py文件的实例代码

    python 反编译exe文件为py文件的实例代码

    这篇文章主要介绍了python 反编译exe文件为py文件的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • Python爬虫之Selenium实现窗口截图

    Python爬虫之Selenium实现窗口截图

    这篇文章主要介绍了Python爬虫之Selenium实现窗口截图,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Python使用ClickHouse的实践与踩坑记录

    Python使用ClickHouse的实践与踩坑记录

    这篇文章主要介绍了Python使用ClickHouse的实践与踩坑记录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Python实现多线程下载脚本的示例代码

    Python实现多线程下载脚本的示例代码

    这篇文章主要介绍了Python实现多线程下载脚本的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04

最新评论