python 如何使用信号量做进程间通信
时间: 2024-09-12 07:13:59 浏览: 42
Python中的进程间通信
在 Python 中,可以使用 `multiprocessing` 模块中的 `Semaphore` 对象来进行进程间的同步和通信。`Semaphore` 实质上是一个计数信号量,它允许限制同时访问某个资源的并发进程数量。
下面是如何使用 `Semaphore` 进行进程间通信的一个简单示例:
```python
import multiprocessing
# 创建一个信号量,初始值为1,意味着只有一个进程能访问共享资源
semaphore = multiprocessing.Semaphore(1)
def process_function(i):
# 获取信号量,如果当前可用,则获取并减一;否则阻塞直到有其他进程释放
semaphore.acquire()
try:
print(f"Process {i} is working on shared resource.")
# 这里是你的处理代码,例如修改共享变量或文件操作等
finally:
# 无论是否发生异常,都会释放信号量,让下一个进程有机会运行
semaphore.release()
# 创建两个进程
processes = [multiprocessing.Process(target=process_function, args=(i,))
for i in range(5)]
# 启动所有进程
for p in processes:
p.start()
# 等待所有进程结束
for p in processes:
p.join()
```
在这个例子中,`Semaphore(1)` 表明最多只有一个进程能够通过 `acquire()` 调用进入共享资源区域。其他进程会在此处阻塞,直到第一个进程完成并调用 `release()` 来释放信号量。
阅读全文