POSIX的系统范围事件同步(模拟threading.event API)
SystemEvent的Python项目详细描述
简介
SystemEvent提供了一个简单的同步原语,用于跨多个 过程。SystemEvent对象完全模拟了threading.Eventapi。在 此外,还为安装了简单脚本(evt_set、evt_wait和evt_clear) 轻松使用shell脚本。
使用SystemEvent的主要原因是在希望进程等待的情况下 在不需要轮询的其他进程上。
安装
pip install SystemEvent
用法
SystemEvent在引擎盖下使用命名的posix信号量,因此需要选择event 应用程序唯一的名称。任何事件引用都将使用此唯一名称。
>;从python中,使用它,就像使用threading.Event实例一样,使用 主要区别在于,您需要为事件命名,以便其他进程可以 参考一下。
例如,在任意多个控制台中,设置一个事件并让它等待(最后一个 每一个`wait()调用将阻塞一行:
>>> import SystemEvent >>> evt = SystemEvent.SystemEvent("my_event") >>> evt.wait()
或者,您可以从您最喜欢的shell运行evt_wait my_event(这是 只是一个小脚本,几乎完全可以完成上面的工作)。
在另一个控制台中,设置事件并注意第一个事件会释放:
>>> import SystemEvent >>> evt = SystemEvent.SystemEvent("my_event") >>> evt.set()
此set()调用将立即释放“我的事件”上的所有阻止事件。 任何进程对evt.wait()的后续调用都不会被阻止,因为事件现在是 全局锁定。
要清除事件(以便再次阻止对evt.wait()的调用),请调用 evt.clear()。
与threading.Event(和multiprocessing.Event)一样,还有一个isSet() 方法,该方法告诉您当前状态(但在检查时要注意竞赛条件 它)。
shell脚本
提供了三个shell脚本,用法如下:
evt_wait <event_name> [timeout_s]
evt_set <event_name>
evt_clear <event_name>
这些脚本是SystemEvent用法上的薄壳。上的timeout_s选项 evt_wait是可选的,默认为无穷大。
所有脚本都有0的退出代码,除非^ {TT5}超时,在这种情况下 返回1。
它是如何工作的?
SystemEvent当前在内部使用POSIX信号量。与他人融合 非python应用程序,您只需访问同一个命名的信号量。小心点 你正确地增加和减少。查看代码了解详细信息…它是 小得可笑。
许可证
麻省理工学院。请参阅LICENSE文件。
待办事项
- 添加测试
- 在Windows中也能工作
- 删除posix_ipc要求