NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1592 most downloaded on PyPI
Job scheduling for humans.
Last release 2 years ago
no release in 18 months
Ships fairly regularly
a new release about every 8 months
Most releases are documented
notes for 22 of 27 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
27 releases · first in 2013
Fix bugs in cross-timezone scheduling (#601, #602, #604, #623)
Fix bugs in cross-timezone scheduling (#601, #602, #604, #623)
Add support for python 3.12 (#606)
Remove dependency on old mock (#622) Thanks @a-detiste!
Fix bug where schedule was off when using .at with timezone (#583) Thanks @AnezeR!
Fix bug where schedule was off when using .at with timezone (#583) Thanks @AnezeR!
One column per quarter.
Dropped support for Python 3.6, add support for Python 3.10 and 3.11.
Dropped support for Python 3.6, add support for Python 3.10 and 3.11.
Add timezone support for .at(). See #517. Thanks @chrimaho!
Get next run by tag (#463) Thanks @jweijers!
Add py.typed file. See #521. Thanks @Akuli!
Fix the re pattern of the 'days'. See #506 Thanks @sunpro108!
Fix test_until_time failure when run early. See #563. Thanks @emollier!
Fix crash repr on partially constructed job. See #569. Thanks @CPickens42!
Code cleanup and modernization. See #567, #536. Thanks @masa-08 and @SergBobrovsky!
Documentation improvements and fix typos. See #469, #479, #493, #519, #520. Thanks to @NaelsonDouglas, @chrimaho, @rudSarkar
Added @repeat() decorator. See #148. Thanks @rhagenaars!
Added @repeat() decorator. See #148. Thanks @rhagenaars!
Added execute .until(). See #195. Thanks @fredthomsen!
Added job retrieval filtered by tags using get_jobs('tag'). See #419. Thanks @skenvy!
Added type annotations. See #427. Thanks @martinthoma!
Bugfix: str() of job when there is no __name__. See #430. Thanks @biggerfisch!
Improved error messages. See #280, #439. Thanks @connorskees and @sosolidkk!
Improved logging. See #193. Thanks @zcking!
Documentation improvements and fix typos. See #424, #435, #436, #453, #437, #448. Thanks @ebllg!
Fix DeprecationWarning of 'collections'. See #296. Thanks @gaguirregabiria!
Depending on your configuration, the following bugfixes might change schedule's behaviour:
Fix: idle_seconds crashes when no jobs are scheduled. See #401. Thanks @yoonghm!
Fix: day.at('HH:MM:SS') where HMS=now+10s doesn't run today. See #331. Thanks @qmorek!
Fix: hour.at('MM:SS'), the seconds are set to 00. See #290. Thanks @eladbi!
Fix: Long-running jobs skip a day when they finish in the next day #404. Thanks @4379711!
Other changes:
Dropped Python 2.7 and 3.5 support, added 3.8 and 3.9 support. See #409
Fix RecursionError when the job is passed to the do function as an arg. See #190. Thanks @connorskees!
Fix DeprecationWarning of 'collections'. See #296. Thanks @gaguirregabiria!
Replaced Travis with Github Actions for automated testing
Revamp and extend documentation. See #395
Improved tests. Thanks @connorskees and @Jamim!
Changed log messages to DEBUG level. Thanks @aisk!
Make at() accept timestamps with 1 second precision (#267). Thanks @NathanWailes!
Make at() accept timestamps with 1 second precision (#267). Thanks @NathanWailes!
Introduce proper exception hierarchy (#271). Thanks @ConnorSkees!
Keep partially scheduled jobs from breaking the scheduler
Keep partially scheduled jobs from breaking the scheduler (#125)
Add support for random intervals (Thanks @grampajoe and @gilbsgilbs)
Improve docs & clean up docstrings
Improve docs & clean up docstrings
Publish to PyPI as a universal (py2/py3) wheel
Publish to PyPI as a universal (py2/py3) wheel
Nothing published for this version
Add proper HTML (Sphinx) docs available at https://schedule.readthedocs.io/
Add proper HTML (Sphinx) docs available at https://schedule.readthedocs.io/
CI builds now run against Python 2.7 and 3.5 (3.3 and 3.4 should work fine but are untested)
Fixed an issue with run_all() and having more than one job that deletes itself in the same iteration. Thanks @alaingilbert.
Add ability to tag jobs and to cancel jobs by tag. Thanks @Zerrossetto.
Improve schedule docs. Thanks @Zerrossetto.
Additional docs fixes by @fkromer and @yetingsky.
Fixed issues where scheduling a job with a functools.partial as the job function fails. Thanks @dylwhich.
Fixed issues where scheduling a job with a functools.partial as the job function fails. Thanks @dylwhich.
Fixed an issue where scheduling a job to run every >= 2 days would cause the initial execution to happen one day early. Thanks @WoLfulus for identifying this and providing a fix.
Added a FAQ item to describe how to schedule a job that runs only once.
Fixed an issue with unicode handling in setup.py that was causing trouble on Python 3 and Debian (https://github.com/dbader/schedule/issues/27). Thank
Fixed an issue with unicode handling in setup.py that was causing trouble on Python 3 and Debian (https://github.com/dbader/schedule/issues/27). Thanks to @waghanza for reporting it.
Added an FAQ item to describe how to deal with job functions that throw exceptions. Thanks @mplewis.
Added support for scheduling jobs on specific weekdays. Example: schedule.every().tuesday.do(job) or schedule.every().wednesday.at("13:15").do(job) (T
Added support for scheduling jobs on specific weekdays. Example: schedule.every().tuesday.do(job) or schedule.every().wednesday.at("13:15").do(job) (Thanks @abultman.)
Run tests against Python 2.7 and 3.4. Python 3.3 should continue to work but we're not actively testing it on CI anymore.
Fixed history (no code changes).
Fixed history (no code changes).
This release introduces two new features in a backwards compatible way:
This release introduces two new features in a backwards compatible way:
Allow jobs to cancel repeated execution: Jobs can be cancelled by calling schedule.cancel_job() or by returning schedule.CancelJob from the job function. (Thanks to @cfrco and @matrixise.)
Updated at_time() to allow running jobs at a particular time every hour. Example: every().hour.at(':15').do(job) will run job 15 minutes after every full hour. (Thanks @mattss.)
Refactored unit tests to mock datetime in a cleaner way. (Thanks @matts.)
Fixed an issue with next_run() throwing a ValueError exception when the job queue is empty. Thanks to @dpagano for pointing this out and thanks to @mr
Fixed an issue with next_run() throwing a ValueError exception when the job queue is empty. Thanks to @dpagano for pointing this out and thanks to @mrhwick for quickly providing a fix.
Fixed issue with at_time jobs not running on the same day the job is created (Thanks to @mattss)
Fixed issue with at_time jobs not running on the same day the job is created (Thanks to @mattss)
Args passed into do() are forwarded to the job function at call time
Added schedule.next_run()
Added schedule.idle_seconds()
Args passed into do() are forwarded to the job function at call time
Increased test coverage to 100%
Changed default delay_seconds for schedule.run_all() to 0 (from 60)
Changed default delay_seconds for schedule.run_all() to 0 (from 60)
Increased test coverage
API change: renamed schedule.run_all_jobs() to schedule.run_all()
API change: renamed schedule.run_all_jobs() to schedule.run_all()
API change: renamed schedule.run_pending_jobs() to schedule.run_pending()
API change: renamed schedule.clear_all_jobs() to schedule.clear()
Added schedule.jobs
- Fix packaging - README fixes
Fix packaging
README fixes
Nothing published for this version
API change: renamed schedule.tick() to schedule.run_pending_jobs()
API change: renamed schedule.tick() to schedule.run_pending_jobs()
Updated README and setup.py packaging
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →