{"id":15579037,"url":"https://github.com/dapper91/resheduler","last_synced_at":"2025-03-29T07:44:34.670Z","repository":{"id":53615741,"uuid":"243805132","full_name":"dapper91/resheduler","owner":"dapper91","description":"python redis scheduler","archived":false,"fork":false,"pushed_at":"2021-03-20T17:50:38.000Z","size":13,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-03T21:45:47.974Z","etag":null,"topics":["distributed-scheduling","redis","scheduler"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dapper91.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.rst","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-02-28T16:21:40.000Z","updated_at":"2023-03-23T07:36:09.000Z","dependencies_parsed_at":"2022-09-09T15:20:22.237Z","dependency_job_id":null,"html_url":"https://github.com/dapper91/resheduler","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dapper91%2Fresheduler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dapper91%2Fresheduler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dapper91%2Fresheduler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dapper91%2Fresheduler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dapper91","download_url":"https://codeload.github.com/dapper91/resheduler/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246156028,"owners_count":20732359,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["distributed-scheduling","redis","scheduler"],"created_at":"2024-10-02T19:13:40.550Z","updated_at":"2025-03-29T07:44:34.654Z","avatar_url":"https://github.com/dapper91.png","language":"Python","readme":"===========\nrescheduler\n===========\n\n.. image:: https://github.com/dapper91/rescheduler/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/dapper91/rescheduler/actions/workflows/test.yml\n    :alt: Build status\n.. image:: https://img.shields.io/pypi/l/rescheduler.svg\n    :target: https://pypi.org/project/rescheduler\n    :alt: License\n.. image:: https://img.shields.io/pypi/pyversions/rescheduler.svg\n    :target: https://pypi.org/project/rescheduler\n    :alt: Supported Python versions\n\n\n``rescheduler`` is a task scheduler built on top of redis. It stores all jobs and schedules in redis which provides\npersistency (depends on redis persistent level configuration), distributed work (multiple schedulers allowed to be\nrun simultaneously) and fault tolerance (in case of one scheduler crash the others takes away its jobs).\n\n\nInstallation\n------------\n\nYou can install rescheduler with pip:\n\n.. code-block:: console\n\n    $ pip install rescheduler\n\n\nQuickstart\n----------\n\nServer side:\n~~~~~~~~~~~~\n\n.. code-block:: python\n\n    import asyncio\n    import aioredis\n    from rescheduler import Scheduler, Job\n\n\n    def tick():\n        print(\"tick\")\n\n\n    def tack():\n        print(\"tack\")\n\n\n    async def callback(job: Job):\n        if job.data['method'] == 'tick':\n            tick()\n\n        elif job.data['method'] == 'tack':\n            tack()\n\n\n    async def main():\n        conn_pool = await aioredis.create_redis_pool(('localhost', 6379))\n        async with Scheduler(conn_pool=conn_pool, job_callback=callback, use_keyspace_notifications=True):\n            await asyncio.sleep(30)\n\n        conn_pool.close()\n        await conn_pool.wait_closed()\n\n\n    if __name__ == '__main__':\n        asyncio.run(main())\n\n\nClient side:\n~~~~~~~~~~~~\n\n.. code-block:: python\n\n    import asyncio\n    import aioredis\n    from rescheduler import Scheduler, Job, CronTrigger\n\n\n    async def main():\n        conn_pool = await aioredis.create_redis_pool(('localhost', 6379))\n        scheduler = Scheduler(conn_pool=conn_pool, job_callback=lambda: None)\n\n        await scheduler.add_job(\n            Job(\n                id='tick-task',\n                trigger=CronTrigger.parse(expr='*/10 * * * * *', seconds_ext=True),\n                data={'method': 'tick'},\n            )\n        )\n\n        await scheduler.add_job(\n            Job(\n                id='tack-task',\n                trigger=CronTrigger.parse(expr='*/10 * * * * *', seconds_ext=True),\n                data={'method': 'tack'},\n            ),\n            delay=5.0,\n        )\n\n        conn_pool.close()\n        await conn_pool.wait_closed()\n\n\n    if __name__ == '__main__':\n        asyncio.run(main())\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdapper91%2Fresheduler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdapper91%2Fresheduler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdapper91%2Fresheduler/lists"}