<center id="pz5tg"></center>
  1. <object id="pz5tg"></object>

    <code id="pz5tg"><small id="pz5tg"></small></code>

    events

    Windows has event objects which can be created and fired system-wide. This is useful for signalling between processes. Eg each of three cooperating processes could create the same event and then use a thread (cf event_handler below) which would block on the event to perform some useful action, for example a data reload. Python also has an event construct, based around the threading support module. Although it is intra-process only, its basic functionality is the same as the Windows events (set, reset, wait).

    This module implements a common event interface, and offers a python version of it (PythonEvent) and a Windows version (Win32Event) where available. The module behaves perfectly well on Linux simply by not creating the Win32Event class. The original intention of the module was to wrap the Win32 event; the Python version was something of an afterthought. If I had time I could probably use the signal module to simulate, under Linux, the inter-process behaviour present in the Windows events.

    Installing It

    Unzip events.zip to somewhere temporary and then just
    python setup.py install
    as usual.

    Example

    common.py

    SHARED_MEMORY_NAME = "shared_memory"
    SHARED_MEMORY_SIZE = 16 * 1024
    
    READY_TO_CONSUME = "ready_to_consume"
    FINISHED_PRODUCING = "finished_producing"
    

    producer.py

    import mmap
    
    import events
    
    import common
    
    shared_memory = mmap.mmap (0, common.SHARED_MEMORY_SIZE, common.SHARED_MEMORY_NAME)
    ready_to_consume_event = events.Win32Event (common.READY_TO_CONSUME)
    finished_producing_event = events.Win32Event (common.FINISHED_PRODUCING)
    
    line_number = 0
    
    while 1:
      ready_to_consume_event.wait ()
      shared_memory.write ("This is line %d\n" % line_number)
      line_number += 1
      finished_producing_event.set ()
    

    consumer.py

    import mmap
    import time
    
    import events
    
    import common
    
    shared_memory = mmap.mmap (0, common.SHARED_MEMORY_SIZE, common.SHARED_MEMORY_NAME)
    ready_to_consume_event = events.Win32Event (common.READY_TO_CONSUME)
    finished_producing_event = events.Win32Event (common.FINISHED_PRODUCING)
    
    while 1:
      ready_to_consume_event.set ()
      finished_producing_event.wait ()
      print shared_memory.readline ()
      time.sleep (2)
    

    Download

    25th November 2003: events.py (v0.1, zipped - tiny)

    11