亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

簡單談?wù)刾ython中的多進(jìn)程

オリジナル 2017-01-09 13:44:57 276
サマリー:進(jìn)程是由系統(tǒng)自己管理的。1:最基本的寫法from multiprocessing import Pool  def f(x):   return x*x  if __name__ == '__main__':   p = P

進(jìn)程是由系統(tǒng)自己管理的。

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、實(shí)際上是通過os.fork的方法產(chǎn)生進(jìn)程的

unix中,所有進(jìn)程都是通過fork的方法產(chǎn)生的。

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、線程共享內(nèi)存

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]


進(jìn)程不共享內(nèi)存:

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]


若想共享內(nèi)存,需使用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、鎖:僅是對于屏幕的共享,因?yàn)檫M(jìn)程是獨(dú)立的,所以對于多進(jìn)程沒有用

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、進(jìn)程間內(nèi)存共享: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) #超時(shí)時(shí)間


同步的就是apply

更多關(guān)于簡單談?wù)刾ython中的多進(jìn)程請關(guān)注PHP中文網(wǎng)(ipnx.cn)其他文章!

手記を発表する

人気のある見出し語