碎片知識
使用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 修改成功