Python多進程數據共享

碎片知識

使用global + 進程鎖是無法對數據進行修改的,只能查看數據。

  • 代碼如下:
import multiprocessing

x = 0

lock = multiprocessing.Lock()


def main():
    global x
    lock.acquire()
    x += 1
    lock.release()


if __name__ == '__main__':

    pool = multiprocessing.Pool(4)
    for i in range(4):
        pool.apply_async(main)
    pool.close()
    pool.join()
    print(x)   # 輸出0 並未對數據進行更改
    print("end")
	

查了半天資料,並未發現 進程池數據共享,執行以下代碼:

import multiprocessing


def main(num):
    num.value += 1


if __name__ == '__main__':

    num = multiprocessing.Value("d", 10.0)
    pool = multiprocessing.Pool(4)
    for i in range(4):
        pool.apply_async(main, args=(num,))
    pool.close()
    pool.join()
    print(num.value) # 值仍爲10.0,並未改變
    print("end")  

要實現進程數據共享,就需要放棄進程池。。

如果有方法,請告訴我!


使用多進程進行數據共享

import multiprocessing


def main(v):
    v.value += 1


if __name__ == '__main__':
    value = multiprocessing.Value("d", 10.0)
    jobs = [multiprocessing.Process(target=main, args=(value,)) for i in range(10)]
    for j in jobs:
        j.start()
    for j in jobs:
        j.join()
    print('Results:', value.value)  # result 20.0 修改成功



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章