Skip to main content

Shared generator between process

Project description

Python library : cm_shared_generator

Resume

In python, it exist a generator type which can be really useful.

The cm_shared_generator library provide a Shared_Generator which share generator between thread and process safely.

Install

Pre-required

Global requirements
  • Python 3 (sudo apt update && sudo apt install python3 -y)
Install requirements
  • Setuptools (sudo apt update && sudo apt install python3-pip -y && pip3 install setuptools)
Installation
python3 setup.py install

Utilization

The utilization of the Shared_Generator is quite simple. Its prototype is like :

Shared_Generator(self, arg_generator, DEFAULT_GENERATOR_TRAITMENT_FUNCTION=None, FORCE=False, MAX_OBJECT_IN_QUEUE=len(os.sched_getaffinity(0)), TIMEOUT=None)

Its parameters are defined as :

  • Required :
    • arg_generator -> The generator to shared
  • Optional :
    • DEFAULT_GENERATOR_TRAITMENT_FUNCTION (Default : None) -> Function to treat default type of value from the generator. Possible value :
      • Shared_Generator.DEFAULT_GENERATOR_TRAITMENT_CLASS (Create a deep copy of the class before the insertion into the Queue).
      • Your own function !
    • FORCE (Default : False) -> If True, the generator will be defined even his type is not a proper generator.
    • MAX_OBJECT_IN_QUEUE (Default : Nb of logical processors) : Defined the maximum of elements in the queue at the same time. ( > 0 )
    • NUMBER_PUT_RETRY (Default : None) -> Number of retry to acquire the semaphore which define if the generator process can continue to fill the Generator list before quitting timeout.
    • TIMEOUT (Default : Shared_Generator.DEFAULT_TIMEOUT) : Defined the timeout of Semaphores (The Shared_Generator will be stopped after (1+NUMBER_PUT_RETRY)*TIMEOUT if no process has taken a value from the generator.
Example :
from cm_shared_generator import Shared_Generator

# Simple integer generator
def int_generator():
    i = 0
    while i<10:
        i+=1
        yield i
    return

my_shared_generator = Shared_Generator(int_generator, MAX_OBJECT_IN_QUEUE=2) # Creation of the generator with a Maximum lenght queue of 2

my_shared_generator.start(NEW_PROCESS=True) # Launch the generator in a new process

val = my_shared_generator.next() # Get the next value of the generator

my_shared_generator.stop() # Stop the generator

For more examples, check unit tests in tests directory.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cm_shared_generator-0.1.4.tar.gz (6.0 kB view hashes)

Uploaded Source

Built Distribution

cm_shared_generator-0.1.4-py3-none-any.whl (11.3 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page