With AMQP:
pip install icij-worker["amqp"]With neo4j:
pip install icij-worker["neo4j"]Create asynchronous task tailored for long running Python functions:
Given the following pure Python function inside the app.py module:
def long_running_task(greeted: str) -> str:
greeting = f"Hello {greeted} !"
return greetingdecorate your function with ICIJApp class and register a new task:
from icij_worker import AsyncApp
my_app = AsyncApp(name="my_app")
@my_app.task
def long_running_task(greeted: str) -> str:
greeting = f"Hello {greeted} !"
return greetingthis will register the long_running_task function under the long_running_task task name.
Optionally add progress handlers for a better task monitoring:
@my_app.task
async def long_running_task(
greeted: str,
progress: Optional[Callable[[float], Awaitable]] = None
) -> str:
if progress is not None:
await progress(0.0)
greeting = f"Hello {greeted} !"
if progress is not None:
await progress(100.0)
return greetingStart a worker pool using:
icij-worker workers start "app.my_app"provide worker pool options using:
icij-worker workers start -c worker_config.json -n 2 --backend multiprocessing "app.my_app"depending on the worker configuration additional setup might be required.
- multiprocessing for CPU bound tasks
- asyncio for I/O bound tasks