Skip to content

ahawker/crython

Folders and files

NameName
Last commit message
Last commit date

Latest commit

4b2bb28 · Oct 2, 2020
Oct 12, 2018
Oct 7, 2019
Nov 25, 2018
Oct 2, 2020
Oct 7, 2019
Nov 25, 2018
Apr 9, 2017
Jan 4, 2017
Oct 7, 2017
Oct 8, 2017
Oct 7, 2019
Oct 7, 2017
Oct 10, 2019
Oct 21, 2019
Oct 2, 2019
Feb 22, 2013
Feb 23, 2013
Oct 21, 2019
Nov 15, 2018
Oct 2, 2019
Oct 21, 2019
Oct 16, 2017
Oct 18, 2017
Oct 21, 2019
Oct 21, 2019

Repository files navigation

crython

Join the chat at https://gitter.im/crython/Lobby

Build Status Build status codecov Code Climate Issue Count

PyPI version PyPI versions

Stories in Ready

crython is a lightweight task (function) scheduler using cron expressions written in python.

Status

This module is actively maintained.

Installation

To install crython from pip:

    $ pip install crython

To install crython from source:

    $ git clone [email protected]:ahawker/crython.git
    $ python setup.py install

Usage

Crython supports seven fields (seconds, minutes, hours, day of month, month, weekday, year).

Call a function once a minute:

    import crython
    
    # Fire once a minute.
    @crython.job(second=0)
    def foo():
        print "... while heavy sack beatings are up a shocking nine hundred percent? - Kent Brockman"

Call a function every ten seconds:

    # Fire every 10 seconds.
    @crython.job(second=range(0, 60, 10))
    def foo():
        print "I'm a big four-eyed lame-o and I wear the same stupid sweater every day. - Homer's Brain"

Call a function with a single cron expression:

    # Fire every 10 seconds.
    @crython.job(second='*/10')
    def foo():
        print "Hail to the thee Kamp Krusty... - Kampers"

Call a function with a full cron expression:

    # Fire once a week.
    @crython.job(expr='0 0 0 * * 0 *')
    def foo():
        print "Back in line, maggot! - Kearny"

Call a function with positional and/or keyword arguments:

    # Fire every second.
    @job('safety gloves', second='*', name='Homer Simpson')
    def foo(item, name):
        print "Well, I don't need {0}, because I'm {1}. -- Grimey".format(item, name)

Call a function using predefined keywords:

    # Fire once a day.
    @crython.job(expr='@daily')
    def foo():
        print "That's where I saw the leprechaun. He tells me to burn things! - Ralph Wiggum"
    # Fire once immediately after scheduler starts.
    @crython.job(expr='@reboot')
    def foo():
        print "I call the big one bitey. - Homer Simpson"

Call a function and run it within a separate thread (default behaviour if ctx is not specified):

    # Fire once a week.
    @crython.job(expr='@weekly', ctx='thread')
    def foo():
        print "No, no, dig up stupid. - Chief Wiggum"

Call a function and run it within a separate process:

    # Fire every hour.
    @crython.job(expr='@hourly', ctx='multiprocess')
    def foo():
        print "Eat my shorts. - Bart Simpson"

Start the global job scheduler:

    if __name__ == '__main__':
        crython.start()
        crython.join()  ## This will block

Stop the global job scheduler:

    crython.stop()
    crython.join(timeout=5000)  ## This will block 5s waiting for thread to stop.

Keywords

Entry Description Equivalent To
@yearly/@annually Run once a year at midnight in the morning of January 1 0 0 0 0 1 1 *
@monthly Run once a month at midnight in the morning of the first of the month 0 0 0 0 1 * *
@weekly Run once a week at midnight in the morning of Sunday 0 0 0 0 * 0 *
@daily Run once a day at midnight 0 0 0 * * * *
@hourly Run once an hour at the beginning of the hour 0 0 * * * * *
@minutely Run once a minute at the beginning of the minute 0 * * * * * *
@reboot Run once at startup @reboot

TODO

  • Support "L", "W" and "#" specials.
  • Determine time delta from now -> next time expression is valid.

Contributing

If you would like to contribute, simply fork the repository, push your changes and send a pull request.

License

Crython is available under the MIT license.

See Other

There are similar python cron libraries out there. See: pycron, python-crontab, cronex.