程序是由系統自己管理的。
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
osinfo(title):
title
, __name__
(os, ): , os.ge
, 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__ == :
i ():
p=process(=f,=(q,i))
p.start()
: q.get()
4、鎖:僅是對於螢幕的共享,因為程序是獨立的,所以對於多程序沒有用
multiprocessing process, lock
f(l, i):
l.acquire()
, il.release()
__name__ == :
lock = lock()
num ():
proce程式設計客棧ss(=f, =(lock, num)).start()
hello world 0
hello world 1
hello w程式設計客棧orld 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
[www.cppcns.com0, -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))
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
#非同步:這種寫法用的不多
multiprocessing pool
time
f(x):
x*xtime.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中的多程序
本文位址:
Python中的多程序
編寫完的 沒有執行時稱為程式,正在執行的 稱為程序。程式是死的 靜態的 程序是活的 動態的 作業系統輪流讓各個任務交替執行,由於cpu的執行速度實在是太快了,我們感覺就像所有任務都在同時執行一樣。多程序中,每個程序中所有資料 包括全域性變數 都各自擁有乙份,互不影響。例如 我們啟動了qq,qq就是乙...
python中的多程序
import multiprocessing import time deffunc arg pname multiprocessing.current process name pid multiprocessing.current process pid print 當前程序id d,name ...
python多程序 python多程序
當有多個非相關任務需要處理時,並行能大大提高處理速度。這裡簡要介紹python的multiprocessing模組。簡單多程序編寫 當我們任務數量確定而且比較少的時候,可以手動為每個任務指定乙個程序來執行。import multiprocessing as mp def f a print a if...