aioscheduler
aioscheduler is a scalable and high-performance task scheduler for asyncio.
It schedules execution of coroutines at a specific time in a single task, making it lightweight and extremely scalable by adding a manager for multiple schedulers.
Tests have shown that aioscheduler can run up to 10 million timed tasks with up to 20 finishing per second when using 20 schedulers. Single tasks can easily schedule up to 10.000 tasks. This is based on tests on a Xeon E5 1650v3.
Installation
pip install aioscheduler
Usage
aioscheduler provides several Scheduler classes that runs a main task to consume coroutines.
There are QueuedScheduler/LifoQueuedScheduler and TimedScheduler, whereas TimedScheduler is the default for Managers.
The TimedScheduler compares datetime objects to UTC by default, to disable it, pass prefer_utc=False to the constructor.
import asyncio
from datetime import datetime, timedelta
from aioscheduler import TimedScheduler
async def work(n: int) -> None:
print(f"I am doing heavy work: {n}")
async def main() -> None:
starting_time = datetime.utcnow()
scheduler = TimedScheduler()
scheduler.start()
for i in range(60):
scheduler.schedule(work(i), starting_time + timedelta(seconds=5 + i))
await asyncio.sleep(65)
asyncio.run(main())
In this example, 60 tasks are scheduled to run in 5 seconds from now, 1 of them per second over a time of 1 minute.
The QueuedScheduler works identical, but consumes tasks in scheduling order immediately and only takes a single coroutine as argument to schedule().
To scale even further, aioscheduler offers the Manager (example with QueuedScheduler backend):
import asyncio
from datetime import datetime, timedelta
from aioscheduler import Manager, QueuedScheduler
async def work(n: int) -> None:
print(f"I am doing heavy work: {n}")
async def main() -> None:
starting_time = datetime.utcnow()
manager = Manager(5, cls=QueuedScheduler) # The number of Schedulers to use
# Leaving out cls defaults to TimedScheduler
manager.start()
for i in range(30000):
manager.schedule(work(i))
await asyncio.sleep(5)
asyncio.run(main())
The manager distributes the tasks across multiple schedulers internally and acts as a load-balancer.
schedule() returns a Task object, you may cancel a task after scheduling by running scheduler.cancel(task) (or manager.cancel(task)). The manager is less efficient for cancelling.
To limit the amount of tasks scheduled, there is a max_tasks argument that takes a positive integer. It is advised to use this in production enviroments of known task queue sizes and available on both Scheduler and Manager.
License
MIT
Metadata
Release files for aioscheduler 1.4.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| aioscheduler-1.4.2.tar.gz | 6.4 kB | Without provenance | Details for aioscheduler-1.4.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| aioscheduler-1.4.2-py3-none-any.whl | Python 3 | none | any | Details for aioscheduler-1.4.2-py3-none-any.whl |
Total release size: 15.5 kB
Release files / aioscheduler-1.4.2.tar.gz
| Download URL | aioscheduler-1.4.2.tar.gz |
|---|---|
| Size | 6.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9fb189c77252baf469f1b2f74dc8321f8516bc3a0428b4160314c0df22ebee06
|
|
BLAKE2b-256 checksum How to use checksums |
6ea1884dcaf4d5370fe5d94f345076474965799ed1b787483cc451ad12ab2ca4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.0 CPython/3.8.5
|
Release files / aioscheduler-1.4.2-py3-none-any.whl
| Download URL | aioscheduler-1.4.2-py3-none-any.whl |
|---|---|
| Size | 9.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8aaeb7bc01df82136fca38e77f4fc75a503c1d78d23917e15ee8c540e3e4bc23
|
|
BLAKE2b-256 checksum How to use checksums |
f3ccb65daefef43796fec989dc44fe4dddb5fd5bf4e9de4ae3a1a6579457bb68
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.0 CPython/3.8.5
|
Security for aioscheduler 1.4.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.