A simple asynchronous task queue
Project description
aiotask
A simple asynchronous task queue
Motivation
Existing famous asynchronous worker library (Celery) doesn't support asyncio and is hard to use. This library aims to help users compose tasks in a very native async-await manner. It is also full-typed for better productivity and correctness.
Example Usage
Install aiotaskq
python -m pip install --upgrade pip
pip install aiotaskq
Define simple app like the following:
tree .
.
└── app
└── app.py
Where app.py
contains the following:
import asyncio
import aiotaskq
@aiotaskq.register_task
def some_task(b: int) -> int:
# Some task with high cpu usage
def _naive_fib(n: int) -> int:
if n <= 1:
return 1
elif n <= 2:
return 2
return _naive_fib(n - 1) + _naive_fib(n - 2)
return _naive_fib(b)
async def main():
async_result = await some_task.apply_async(42)
sync_result = some_task(42)
assert async_result == sync_result
print(f"sync_result == async_result == 165580141. Awesome!")
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Start redis
docker run --publish 127.0.0.1:6379:6379 redis
In a different terminal, start the aiotaskq worker
python -m aiotaskq worker app.app
Then in another different terminal, run your app
python ./app.py
# Output: sync_result == async_result == {42}. Awesome!
Advance usage
# TODO: Example of composing chain of tasks (chord + chain in Celery terms)
Install
pip install aiotaskq
Links
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
aiotaskq-0.0.4.tar.gz
(4.7 kB
view hashes)