简单谈谈python中的多进程
作者:黑白子 发布时间:2023-05-13 15:19:17
标签:python,多进程
进程是由系统自己管理的。
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


猜你喜欢
- 本文实例为大家分享了Vue实现简单跑马灯特效的具体代码,供大家参考,具体内容如下效果:点击按钮让文字动起来,点击停止按钮让文字停止知识点:s
- 先看一下效果图: index.wxml <view class='{{tabIsTop ? "fixedT
- 前言,在pytorch中,当服务器上的gpu被占用时,很多时候我们想先用cpu调试下代码,那么就需要进行gpu和cpu的切换。方法1:x.t
- import pdbdef pdb_test(arg): for i in range(arg):&nb
- python程序结构python“一切皆对象”,这是接触python听到最多的总结了。在python中最基层的单位应该就是对象了,对象需要靠
- 这篇博客是自己《数据挖掘与分析》课程讲到正则表达式爬虫的相关内容,主要简单介绍Python正则表达式爬虫,同时讲述常见的正则表达式分析方法,
- 今天分享 3 个 Python 编程小技巧,来看看你是否用过?1、如何按照字典的值的大小进行排序我们知道,字典的本质是哈希表,本身是无法排序
- 代码如下:<% Response.Buffer = True '一般情况下,当用户请求
- 初学python和numpy,对在学习多维切片的过程中遇到的问题做个总结。一维切片就不说了,比较简单,先说下二维的,二维的理解了多维的就简单
- import Exception# except 在捕获错误异常的时候 是要根据具体的错误类型来捕获的# 用一个块 可以捕获多个不同类型的异
- 动态加载JavaScript文件和CSS资源为Web前端开发提供了巨大的灵活性,同时也实现了lazy load和按需加载,相比XMLHttp
- 本文实例讲述了go语言base64用法。分享给大家供大家参考。具体如下:这里展示golang base64 的一个小例子,代码如下:pack
- 方法一:函数添加1 import sys2 查看sys.path3 添加sys.path.append("c:\\")方
- 如何导入SQL数据库如何将现成的数据库导入到MySQL中?有两种方式:通过终端命令行语句导入:mysql> source SQL文件的
- FCKeditor是目前互联网上最好的在线编辑器,功能强大,支持IE 5.5+ (Windows), Fire
- vue要绑定下拉列表会稍微有点不同。因为下拉列表不是一个标签能搞掂的。原生的html写法如下<select> <optio
- 一般一个网站的首页访问量是最大的,如果您的网站的首页打开的非常缓慢,您的客户将会陆续离开你的网站.通常我们把需要经过复杂运算或者查询数据库得
- 网页设计中的脏、乱、差,是我们在设计过程中常会遇到的问题。通常"脏"是由对色彩使用不当所产生的,而色彩使用不当产生的不好
- 一. XSL入门1.XSL---XML的样式表 HTML网页使用预先确定的标识(tags),这就是说所有的标记都有明确的含义,例如<p
- 1、安装 vue-i18n依赖yarn add vue-i18n 或者 npm install vue-i18n --save-dev2、在