Metadata-Version: 2.1
Name: parallel-execute
Version: 0.0.6
Summary: Python wrappers for easy multiprocessing and threading
Home-page: https://github.com/parallel-execute/parallel-execute
Author: Sahil Pardeshi
Author-email: sahilrp7@gmail.com
License: MIT License
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Operating System :: OS Independent

parallel-execute
================

Python wrappers for easy multiprocessing and threading.

Run multiple functions in parallel using parallel-execute

.. image:: https://img.shields.io/github/license/parallel-execute/parallel-execute.svg
   :target: https://github.com/parallel-execute/parallel-execute/blob/master/LICENSE
   :alt: GitHub

.. image:: https://readthedocs.org/projects/parallel-ssh/badge/?version=latest
   :target: http://parallel-execute.readthedocs.org/en/latest/
   :alt: Latest documentation

.. image:: https://img.shields.io/pypi/v/parallel-execute.svg?color=yellow
   :target: https://pypi.org/project/parallel-execute/
   :alt: PyPI

.. image:: https://img.shields.io/pypi/wheel/parallel-execute.svg
   :target: https://pypi.org/project/parallel-execute/
   :alt: PyPI - Wheel

.. image:: https://img.shields.io/pypi/pyversions/parallel-execute.svg
   :alt: PyPI - Python Version

Installation
------------

::

    pip install parallel-execute

Usage Example
-------------

1. Create a loom:
'''''''''''''''''

This takes a number of tasks and executes them using a pool of
threads/process.

- To use threading

.. code-block:: python

    from pexecute.thread import ThreadLoom
    loom = ThreadLoom(max_runner_cap=10)


- To use multiprocessing

.. code-block:: python

    from pexecute.process import ProcessLoom
    loom = ProcessLoom(max_runner_cap=10)

**max\_runner\_cap**: is the number of maximum threads/processes to run at a
time. You can add as many as functions you want, but only ``n``
functions will run at a time in parallel, ``n`` is the max\_runner\_cap

2. Add tasks in loom
''''''''''''''''''''

- Add a function in loom using **add_function**

.. code-block:: python

    loom.add_function(f1, args1, kw1)
    loom.add_function(f2, args2, kw2)
    loom.add_function(f3, args3, kw3)

- Add multiple functions together using **add_work** method

.. code-block:: python

    work = [(f1, args1, kwargs1), (f2, args2, kwargs2), (f3, args3, kwargs3)]
    loom.add_work(work)

3. Execute all tasks
''''''''''''''''''''

After adding tasks, calling execute will return a dictionary of results
corresponding to the keys or the order in which the tasks were added.

.. code-block:: python

    output = loom.execute()

key is the order in which the function was added and value is the return data of the function.

.. code-block:: python

    # Example:

    def fun1():
       return "Hello World"

    def fun2(a):
       return a

    def fun3(a, b=0):
       return a+b

    loom.add_function(fun1, [], {})
    loom.add_function(fun2, [1], {})
    loom.add_function(fun3, [1], {'b': 3})

    output = loom.execute()
    >>> output
    {0: {'started_time': datetime.datetime(2019, 6, 28, 19, 34, 23, 362899), 'finished_time': datetime.datetime(2019, 6, 28, 19, 34, 23, 364479), 'execution_time': 0.00158, 'output': 'Hello World', 'got_error': False, 'error': None}, 1: {'started_time': datetime.datetime(2019, 6, 28, 19, 34, 23, 364487), 'finished_time': datetime.datetime(2019, 6, 28, 19, 34, 23, 365868), 'execution_time': 0.001381, 'output': 1, 'got_error': False, 'error': None}, 2: {'started_time': datetime.datetime(2019, 6, 28, 19, 34, 23, 366653), 'finished_time': datetime.datetime(2019, 6, 28, 19, 34, 23, 368063), 'execution_time': 0.00141, 'output': 'Hello World', 'got_error': False, 'error': None}, 3: {'started_time': datetime.datetime(2019, 6, 28, 19, 34, 23, 369301), 'finished_time': datetime.datetime(2019, 6, 28, 19, 34, 23, 370670), 'execution_time': 0.001369, 'output': 1, 'got_error': False, 'error': None}, 4: {'started_time': datetime.datetime(2019, 6, 28, 19, 34, 23, 372886), 'finished_time': datetime.datetime(2019, 6, 28, 19, 34, 23, 374007), 'execution_time': 0.001121, 'output': 4, 'got_error': False, 'error': None}}

We can also provide a **key** to store the function return data.

.. code-block:: python

    # Example:
    loom.add_function(fun1, [], {}, 'key1')
    loom.add_function(fun2, [1], {}, 'fun2')
    loom.add_function(fun3, [1], {'b': 3}, 'c')

    output = loom.execute()
    >>> output
    {'key1': {'started_time': datetime.datetime(2019, 6, 28, 19, 36, 18, 208442), 'finished_time': datetime.datetime(2019, 6, 28, 19, 36, 18, 209500), 'execution_time': 0.001058, 'output': 'Hello World', 'got_error': False, 'error': None}, 'fun2': {'started_time': datetime.datetime(2019, 6, 28, 19, 36, 18, 210061), 'finished_time': datetime.datetime(2019, 6, 28, 19, 36, 18, 211147), 'execution_time': 0.001086, 'output': 1, 'got_error': False, 'error': None}, 'c': {'started_time': datetime.datetime(2019, 6, 28, 19, 36, 18, 212602), 'finished_time': datetime.datetime(2019, 6, 28, 19, 36, 18, 213896), 'execution_time': 0.001294, 'output': 4, 'got_error': False, 'error': None}}



