|

楼主 |
发表于 2024-10-31 21:34:42
|
显示全部楼层
python multiprocessing 共享对象没有直接提供锁
Python的multiprocessing模块提供了多种方式来共享数据和通信,但没有直接提供锁的机制。如果你需要在多个进程间同步对共享数据的访问,你可以使用multiprocessing.Lock。
以下是一个使用Lock来同步访问共享资源的简单例子:
- from multiprocessing import Process, Lock, Manager
-
- def worker(lock, num):
- with lock: # 使用with语句自动获取和释放锁
- for i in range(10):
- print(f"Worker {num}: {i}")
-
- if __name__ == "__main__":
- lock = Manager.Lock()
- processes = [Process(target=worker, args=(lock, i)) for i in range(5)]
- for p in processes:
- p.start()
- for p in processes:
- p.join()
复制代码
在这个例子中,我们创建了5个进程,每个进程运行worker函数,它们都使用同一个Lock对象来确保同一时间只有一个进程可以访问共享资源(在这个例子中是打印输出)。通过使用with lock:,我们可以保证在with块执行期间,锁会被获取,并且在块执行完毕后自动释放。这样就可以避免竞态条件,保证同步执行。
注意使用multiprocessing实际是线程间共享,不能直接使用Lock(), 而要使用manager.Lock(). |
|