| 
 | 
 
 
 楼主 |
发表于 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(). |   
 
 
 
 |