multiprocessing.Event()

发布时间 2023-12-27 21:50:26作者: MoKin_Li

`multiprocessing.Event()` 是 Python 中的一个类,用于在多进程之间共享布尔变量。这个类提供了一种简单的并发原语,允许进程之间进行通信。`multiprocessing.Event()` 包装了一个布尔变量,可以设置为“已设置”(True)或“未设置”(False)。进程共享 `Event` 实例后,可以检查事件是否已设置,设置事件,清除事件(将其标记为未设置),或等待事件被设置。

要使用 `multiprocessing.Event()`,首先需要创建一个 `Event` 实例,然后可以检查事件是否已设置,设置事件,清除事件,或等待事件被设置。可以通过调用 `is_set()` 函数来检查事件是否已设置,通过调用 `set()` 函数来设置事件,通过调用 `clear()` 函数来将事件标记为未设置,通过调用 `wait()` 函数来等待事件被设置。`wait()` 函数还可以传递一个“超时”参数,限制进程愿意等待事件被设置的时间。

以下是使用 `multiprocessing.Event()` 的一个示例:

```python
from multiprocessing import Process, Event
import time

def task(event, number):
    print(f'Process {number} waiting...')
    event.wait()
    print(f'Process {number} got the event')

if __name__ == '__main__':
    event = Event()  # 创建一个共享的 Event 实例

    processes = [Process(target=task, args=(event, i)) for i in range(5)]  # 创建一组进程

    for process in processes:
        process.start()  # 启动所有进程

    time.sleep(2)  # 主进程暂停一段时间

    event.set()  # 设置事件,触发所有子进程

    for process in processes:
        process.join()  # 等待所有子进程结束
```

在这个示例中,首先创建了一个共享的 `Event` 实例。然后创建了一组进程,每个进程都等待事件被设置,然后执行一些工作。主进程暂停了一段时间,然后设置了事件,触发了所有子进程。最后,主进程等待所有子进程结束。

这就是使用 `multiprocessing.Event()` 在多进程之间共享事件的基本方法。