POSIX的系统范围事件同步(模拟threading.event API)

SystemEvent的Python项目详细描述


简介

SystemEvent提供了一个简单的同步原语,用于跨多个 过程。SystemEvent对象完全模拟了threading.Eventapi。在 此外,还为安装了简单脚本(evt_setevt_waitevt_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文件。

待办事项

  1. 添加测试
  2. 在Windows中也能工作
  3. 删除posix_ipc要求

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java PUT请求提供415不支持的媒体类型   JavaMockito:如何在不模拟所有参数的情况下轻松地存根一个方法   java如何将NameValuePair传递给安卓中的另一个活动?   servalet java中的tomcat错误   java Android手机无法连接到eclipse   nullpointerexception在Java中如何将null转换为false?   Java中的http代理身份验证   java如何确保最新版本的JAR与JNLP应用程序一起使用?   简单Java代码上的性能大内存占用   列出AWS EC2实例上运行的服务上的对象时,java 403访问被拒绝   java创建一个类,当创建一个新实例时,它会被添加到一个hasmap中   LookupService中的java getLocation方法返回null   java获取要在ListView中显示的ArrayList字符串编号/位置