多程序共享 同步

2021-08-02 04:39:49 字數 1937 閱讀 1026

#!/usr/bin python

#coding=utf-8

from multiprocessing import process,array,value

deff

(n,a):

n.value = 3.1415926

for i in range(5):

a[i] = -a[i]

if __name__ == '__main__':

num = value('d',0.0)

arr = array('i',range(10))

print num.value

print arr[:]

p = process(target=f,args=(num,arr))

p.start()

p.join()

print num.value

print arr[:]

#!/usr/bin python

#coding=utf-8

from multiprocessing import process,array,value

deff

(n,a,raw_list):

n.value = 3.1415926

for i in range(5):

a[i] = -a[i]

print raw_list[:]

if __name__ == '__main__':

num = value('d',0.0)

arr = array('i',range(10))

raw_list = range(10)

print num.value

print arr[:]

p = process(target=f,args=(num,arr,raw_list))

p.start()

p.join()

print num.value

print arr[:]

print raw_list[:]

這個程序pclone了父程序的乙份資料,raw_list是它那個程序修改了,但原來父程序的raw_lsit還是原來的值

you understand!!

子程序會複製父程序的資料,所以在子程序裡面修改的值在父程序中不會改變的。要使用multiprocessing裡面的array和value

manager就是乙個中介、橋梁(proxy),搭起兩個程序資料同步的橋梁。

manager自己就有鎖lock,不用管內部實現機制,直接用就好了。

很好很強大,推薦使用這種方式。

用好python官網文件,乙個巨大的資源寶庫。

python docs

manager

#!/usr/bin python

#coding=utf-8

from multiprocessing import process,manager

deff

(d,l):

d['0'] = none

d['1'] = '111'

d[2] = 222

l.reverse()

print d

print l[:]

if __name__ == '__main__':

manager = manager()

d = manager.dict()

l = manager.list(range(10))

p = process(target=f,args=(d,l))

p.start()

p.join()

print d

print l[:]

多程序檔案共享

一種方法是使用檔案鎖,利用fcntl函式對於檔案進行加鎖解鎖操作,以達到互斥訪問的目的,但是在控制時需要注意程序之間的關係,在有多個程序和共享資源時,應注意死鎖的避免。上乙個最開始寫的程式吧,簡單,就是兩個程序互斥訪問檔案。include include include include void r...

多程序資料共享

不用程序池的多程序的資料共享from multiprocessing import process,queue queue queue def func a,q re f 我是子程序 我放入data q.put re if name main ls for i in range 10 p proce...

多程序manager共享

使用manager在程序之間事項共享資料.栗子 主程序呼叫manager,建立乙個字典d和乙個列表l,啟動十個子程序,每個子程序都向d和l中放資料 輸出結果 d 7 python python37 python.exe d 7 python s14 其他 aaaa.py 0,1,2,3,4,1012...