在Python中,可以使用multiprocessing
模塊中的Lock
類來(lái)實(shí)現(xiàn)多進(jìn)程鎖。
下面是一個(gè)簡(jiǎn)單的例子,展示了如何在多進(jìn)程中使用鎖:
import multiprocessing
# 共享變量
counter = multiprocessing.Value('i', 0)
lock = multiprocessing.Lock()
def increment():
for _ in range(100000):
with lock:
counter.value += 1
def main():
processes = []
for _ in range(3):
process = multiprocessing.Process(target=increment)
process.start()
processes.append(process)
for process in processes:
process.join()
print(f"Counter value: {counter.value}")
if __name__ == '__main__':
main()
在上面的例子中,我們定義了一個(gè)共享變量counter
,它使用了multiprocessing.Value
來(lái)創(chuàng)建一個(gè)可被不同進(jìn)程共享的整數(shù)值。然后我們創(chuàng)建了一個(gè)鎖lock
,用于在多個(gè)進(jìn)程之間進(jìn)行同步。
increment
函數(shù)是我們要在每個(gè)進(jìn)程中運(yùn)行的邏輯,它使用了with lock
語(yǔ)句來(lái)獲取鎖,然后對(duì)counter.value
進(jìn)行自增操作。
在main
函數(shù)中,我們創(chuàng)建了3個(gè)進(jìn)程,并將它們添加到processes
列表中。然后通過(guò)process.join()
等待所有進(jìn)程執(zhí)行完畢。
最后,我們打印出counter.value
的值,以驗(yàn)證多進(jìn)程對(duì)共享變量的修改是否正確。
注意,鎖的使用應(yīng)該盡可能地減少,因?yàn)樗鼤?huì)引入額外的開銷。只有在需要對(duì)共享資源進(jìn)行互斥訪問(wèn)時(shí),才應(yīng)該使用鎖。