加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

简单谈谈python中的多进程

发布时间:2020-12-16 20:19:27 所属栏目:Python 来源:网络整理
导读:进程是由系统自己管理的。 1:最基本的写法 from multiprocessing import Pooldef f(x): return x*xif __name__ == '__main__': p = Pool(5) print(p.map(f,[1,2,3]))[1,4,9] 2、实际上是通过os.fork的方法产生进程的 unix中,所有进程都是通过fork的方法产

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

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,3]
[0,3,4]
[0,5]
[0,5,6]
[0,6,7]
[0,7,8]
[0,8,9]

进程不共享内存:

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

__name__ == :
  info=[]
  i ():
    p=Process(=run,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,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,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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读