Skip to content

Latest commit

 

History

History
41 lines (31 loc) · 1.46 KB

README.md

File metadata and controls

41 lines (31 loc) · 1.46 KB

Expool

EO principles respected here Build Status codecov

Simple asynchronous execution pool primitive. You can think of it as of a threading.ThreadPool for coroutines.

Usage

import asyncio
from expool import ExecutionPoolSimple

async def main():
    pool = ExecutionPoolSimple(size=3) # size parameter sets the max amount of concurrent coroutines 
    
    async def some_job():
        await asyncio.sleep(3)
    
    await pool.add(some_job) # Returns immediately if the pool is not full.
    await pool.add(some_job) # If the pool max size is reached, waits 
    # until one of the pool's coroutines finishes.
    
    await pool.close()  # wait for all of the jobs to finish.

You may also set a timeout for .close() method:

    await pool.close(timeout=10)  

If the timeout is reached, ExecutionPoolSimple cancels all remaining coroutines and returns.

You may also want to check out ExecutionPool decorators:

  • ExecutionPoolMonitored - a pool with periodical logging of the jobs inside the pool;
  • ExecutionPoolCapped - a pool with a limited lifespan.

Installation

pip install expool