两个python脚本使用互斥锁
时间: 2025-08-26 07:51:23 浏览: 21
在 Python 中,如果你想在多个脚本(或多个进程)之间共享资源并防止同时访问,可以使用互斥锁(Mutex)。互斥锁确保一次只有一个进程可以访问共享资源。通常,这种场景出现在使用 `multiprocessing` 模块时。
下面是一个使用 `multiprocessing.Lock` 的完整示例,包含两个 Python 脚本:
---
### 脚本 1:`process1.py`
```python
import multiprocessing
import time
def worker(lock, filename):
with lock:
print("Process 1 acquiring lock...")
with open(filename, 'a') as f:
f.write("Process 1 wrote this\n")
time.sleep(2) # 模拟耗时操作
if __name__ == '__main__':
lock = multiprocessing.Lock()
filename = 'shared_file.txt'
p = multiprocessing.Process(target=worker, args=(lock, filename))
p.start()
p.join()
```
---
### 脚本 2:`process2.py`
```python
import multiprocessing
import time
def worker(lock, filename):
with lock:
print("Process 2 acquiring lock...")
with open(filename, 'a') as f:
f.write("Process 2 wrote this\n")
time.sleep(2) # 模拟耗时操作
if __name__ == '__main__':
lock = multiprocessing.Lock()
filename = 'shared_file.txt'
p = multiprocessing.Process(target=worker, args=(lock, filename))
p.start()
p.join()
```
---
### 说明:
- 这两个脚本都会启动一个子进程,并尝试获取同一个锁。
- 锁通过 `multiprocessing.Lock()` 创建,用于同步多个进程对共享资源(这里是文件)的访问。
- 使用 `with lock:` 语句确保锁在使用完后自动释放。
- 共享资源是一个文本文件 `shared_file.txt`,两个脚本都会向该文件写入内容。
---
### 扩展:使用共享锁对象(跨进程)
如果你希望两个脚本之间共享同一个锁对象(例如运行在不同机器或不同时间),可以使用 `multiprocessing.Manager()` 来创建共享锁:
```python
from multiprocessing import Process, Manager
def worker(lock, filename):
with lock:
print("Process acquiring lock...")
with open(filename, 'a') as f:
f.write("A process wrote this\n")
if __name__ == '__main__':
with Manager() as manager:
lock = manager.Lock()
filename = 'shared_file.txt'
p1 = Process(target=worker, args=(lock, filename))
p2 = Process(target=worker, args=(lock, filename))
p1.start()
p2.start()
p1.join()
p2.join()
```
---
###
阅读全文
相关推荐




















