Skip to main content

Schedule asyncio coroutines

Project description

everytime - Schedule asyncio coroutines

TLDR

@every.other.wednesday.at(hour=12)
async def do_something():
    ...

Full Example

from everytime import every
import everytime

@every(5).seconds
async def greet():
    print("Hello")

everytime.run_forever()

How to schedule coroutines

everytime expressions as decorators

All everytime expressions can be used as function decorators.

@every(5).seconds
async def greet():
    print("Hello")

@schedule

Aternatively you can wrap the everytime expression into a call to @schedule.

@schedule(every(5).seconds)
async def greet():
    print("Hello")

This allows you to pass custom datetime iterables to @schedule (see Schedule custom times).

Schedule custom times

@schedule accepts datetime iterables. The following schedules work:

@schedule([datetime.fromisoformat('2022-11-01T12:00:00'), datetime.fromisoformat('2023-01-01T12:00:00')])

@schedule(itertools.islice(every.day, 5))

@schedule(map(lambda _: datetime.now() + timedelta(seconds=1), sys.stdin))

do()

If you prefer to keep your function definitions and scheduling rules separate, use the do-function.

async def greet():
    print("Hello")

every(5).seconds.do(greet)

Supported Expressions

Quantification

Every time unit can be quantified by every, every.other or every(n):

  • every.second
  • every.other.second
  • every(5).seconds

Supported time units

The supported time units are

  • millisecond
  • second
  • minute
  • hour
  • day
  • week

Weekdays

Also, weekdays monday through sunday are supported. every.wednesday starts on the next Wednesday. If today is a Wednesday, every.wednesday starts today.

Specific time of the day

day and the weekdays can be scheduled for a specific time of the day:

every.day.at(hour=12, minute=15)

(Note that hour is 24-hour based)

Event Loops

everytime uses asyncio and schedules coroutines on an event loop.

Default Behavior

By default, all coroutines are scheduled on the same event loop. After all schedules are set, the loop must be invoked with everytime.run_forever()

@schedule(every.second)
async def greet():
    print("Hello")

everytime.run_forever()

Async Environment

If called in an async environment (i.e. there is already an event loop running), coroutines are scheduled on asyncio.get_running_loop().

async def main():
    @schedule(every.second)
    async def greet():
        print("Hello")

    await asyncio.sleep(10)

asyncio.run(main())

Note, that the scheduling only works while the loop is running. In this case, greet will only be called every second, while main is still running.

Custom Event Loops

You can schedule your coroutines to run on a custom event loop by passing an optional argument loop to@schedule or do().

l = asyncio.new_event_loop()

@schedule(every.second, loop=l)
async def greet():
    print("Hello")

l.run_forever()
l = asyncio.new_event_loop()

async def greet():
    print("Hello")

every.second.do(greet, loop=l)
l.run_forever()

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

everytime-0.2.1.tar.gz (4.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

everytime-0.2.1-py3-none-any.whl (4.8 kB view details)

Uploaded Python 3

File details

Details for the file everytime-0.2.1.tar.gz.

File metadata

  • Download URL: everytime-0.2.1.tar.gz
  • Upload date:
  • Size: 4.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.1 CPython/3.10.7 Linux/5.15.72-1-MANJARO

File hashes

Hashes for everytime-0.2.1.tar.gz
Algorithm Hash digest
SHA256 3ffbfce85d6c19d44908d5520a27525a89005384b44ab84b5b885351e40bc7cc
MD5 e925976e7be8bd42812b449f8478876a
BLAKE2b-256 619bce455796d148057269788240d92a6472655dd2217e76fc8aa4c32ec17fa6

See more details on using hashes here.

File details

Details for the file everytime-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: everytime-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 4.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.1 CPython/3.10.7 Linux/5.15.72-1-MANJARO

File hashes

Hashes for everytime-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 aaef583220f66e0fbe5e1df809bf17aa86826044c0f2ff2c9ea0dd0842142199
MD5 7f50a7f4b1e9b266de7606fda3cdd588
BLAKE2b-256 e9e358f1295bfb720cfff7a42783a4d6e47e7f606bbb68fb56b42a449b2ad0ec

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page