Skip to main content

Introduction

SystemEvent provides a simple synchronization primitive for use across multiple processes. The SystemEvent object emulates the threading.Event API exactly. In addition, simple scripts (evt_set, evt_wait, and evt_clear) are installed for easy usage from shell scripts.

The main reason to use SystemEvent is in situations when you want processes to wait on other processes without the need for polling.

Installation

pip install SystemEvent

Usage

SystemEvent uses named posix semaphores under the hood, so you need to choose event names that are unique to your application. Any event references will use this unique name.

>From Python, use it exactly like you would use a threading.Event instances, with the main difference being that you need to give your event a name so that other processes can reference it.

For example, in as many consoles as you like, set up an event and have it wait (the last line will block on each `wait() call):

>>> import SystemEvent
>>> evt = SystemEvent.SystemEvent("my_event")
>>> evt.wait()

Alternatively, you can just run evt_wait my_event from your favorite shell (this is just a small script that does the above almost exactly).

In another console, set the event and note that the first event releases:

>>> import SystemEvent
>>> evt = SystemEvent.SystemEvent("my_event")
>>> evt.set()

All events blocking on “my_event” will be immediately released by this set() call. Subsequent calls to evt.wait() from any process will not block, since the event is now globally latched.

To clear the event (so that calls to evt.wait() will block again), call evt.clear().

As with threading.Event (and multiprocessing.Event) there is also an isSet() method which tells you the current state (but watch out for race conditions when checking it).

Shell scripts

Three shell scripts are provided, with the following usage:

evt_wait <event_name> [timeout_s]

evt_set <event_name>

evt_clear <event_name>

These scripts are thin shells over SystemEvent usage. The timeout_s option on evt_wait is optional, and defaults to infinity.

All scripts have an exit code of 0, unless evt_wait times out, in which case it returns 1.

How does it work?

SystemEvent currently uses a posix semaphore internally. To integrate with other non-python applications, you can just access the same named semaphore. Just be careful that you increment and decrement correctly. Check out the code for details… it is ridiculously small.

License

MIT. See LICENSE file.

TODO

  1. Add tests

  2. Make it work in Windows, too

  3. Remove the posix_ipc requirement

Release files for SystemEvent 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for SystemEvent 1.0.1
File Size Uploaded
SystemEvent-1.0.1.tar.gz 3.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for SystemEvent 1.0.1
File Interpreter ABI Platform
SystemEvent-1.0.1-py2-none-any.whl Python 2 none any Details

Total release size: 10.6 kB

Release files / SystemEvent-1.0.1.tar.gz

Download URL SystemEvent-1.0.1.tar.gz
Size 3.9 kB
Tags Source
SHA-256 checksum
How to use checksums
c1240745a26083506f989a7a1bb60aae9636909669603dd0d259a4fc8d2e45c6
BLAKE2b-256 checksum
How to use checksums
b8e71be6904240974fa79bf6d6b1e7927bebbdb119de3cc5b1d010b5bdbd447b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / SystemEvent-1.0.1-py2-none-any.whl

Download URL SystemEvent-1.0.1-py2-none-any.whl
Size 6.8 kB
Tags Python 2
SHA-256 checksum
How to use checksums
2b670144a480fac3f7d0ad1112109efb30d6dacf2ed95f06536c675b0309e84c
BLAKE2b-256 checksum
How to use checksums
05e1f174dfbcab4cf61a21d520c8d1d8f8a5326754a572596c72d3a94647c472
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files

1.0.0

2 release files

0.9.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page