{"id":13415993,"url":"https://github.com/Koed00/django-q","last_synced_at":"2025-03-14T23:31:13.508Z","repository":{"id":37431295,"uuid":"37411702","full_name":"Koed00/django-q","owner":"Koed00","description":"A multiprocessing distributed task queue for Django","archived":false,"fork":false,"pushed_at":"2024-08-13T12:14:42.000Z","size":1854,"stargazers_count":1833,"open_issues_count":332,"forks_count":290,"subscribers_count":50,"default_branch":"master","last_synced_at":"2024-10-29T11:06:22.899Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://django-q.readthedocs.org","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Koed00.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["koed00"]}},"created_at":"2015-06-14T12:37:08.000Z","updated_at":"2024-10-25T09:00:10.000Z","dependencies_parsed_at":"2024-01-16T10:37:46.357Z","dependency_job_id":"456c3dbc-2514-42b4-ab76-448caa934230","html_url":"https://github.com/Koed00/django-q","commit_stats":{"total_commits":1028,"total_committers":64,"mean_commits":16.0625,"dds":0.1381322957198443,"last_synced_commit":"85baaccd2c3adfe0a414d4237465163e9ff6e5a0"},"previous_names":[],"tags_count":80,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Koed00%2Fdjango-q","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Koed00%2Fdjango-q/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Koed00%2Fdjango-q/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Koed00%2Fdjango-q/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Koed00","download_url":"https://codeload.github.com/Koed00/django-q/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243663466,"owners_count":20327299,"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":[],"created_at":"2024-07-30T21:00:53.524Z","updated_at":"2025-03-14T23:31:12.987Z","avatar_url":"https://github.com/Koed00.png","language":"Python","funding_links":["https://github.com/sponsors/koed00"],"categories":["Third-Party Packages","Task Queue","Python","Tasks","Best Django Admin Interface Resources","任务队列"],"sub_categories":["Task Queues","Tools","**🕒 Task Scheduling \u0026 Background Jobs**"],"readme":".. image:: docs/_static/logo.png\n    :align: center\n    :alt: Q logo\n    :target: https://django-q.readthedocs.org/\n\nA multiprocessing distributed task queue for Django\n---------------------------------------------------\n\n|image0| |image1| |docs| |image2|\n\nFeatures\n~~~~~~~~\n\n-  Multiprocessing worker pool\n-  Asynchronous tasks\n-  Scheduled, cron and repeated tasks\n-  Signed and compressed packages\n-  Failure and success database or cache\n-  Result hooks, groups and chains\n-  Django Admin integration\n-  PaaS compatible with multiple instances\n-  Multi cluster monitor\n-  Redis, Disque, IronMQ, SQS, MongoDB or ORM\n-  Rollbar and Sentry support\n\nRequirements\n~~~~~~~~~~~~\n\n-  `Django \u003chttps://www.djangoproject.com\u003e`__ \u003e = 2.2\n-  `Django-picklefield \u003chttps://github.com/gintas/django-picklefield\u003e`__\n-  `Arrow \u003chttps://github.com/crsmithdev/arrow\u003e`__\n-  `Blessed \u003chttps://github.com/jquast/blessed\u003e`__\n\nTested with: Python 3.7, 3.8, 3.9 Django 2.2.X and 3.2.X\n\n.. warning:: Since Python 3.7 `async` became a reserved keyword and was refactored to `async_task`\n\nBrokers\n~~~~~~~\n- `Redis \u003chttps://django-q.readthedocs.org/en/latest/brokers.html#redis\u003e`__\n- `Disque \u003chttps://django-q.readthedocs.org/en/latest/brokers.html#disque\u003e`__\n- `IronMQ \u003chttps://django-q.readthedocs.org/en/latest/brokers.html#ironmq\u003e`__\n- `Amazon SQS \u003chttps://django-q.readthedocs.org/en/latest/brokers.html#amazon-sqs\u003e`__\n- `MongoDB \u003chttps://django-q.readthedocs.org/en/latest/brokers.html#mongodb\u003e`__\n- `Django ORM \u003chttps://django-q.readthedocs.org/en/latest/brokers.html#django-orm\u003e`__\n\nInstallation\n~~~~~~~~~~~~\n\n-  Install the latest version with pip::\n\n    $ pip install django-q\n\n\n-  Add `django_q` to your `INSTALLED_APPS` in your projects `settings.py`::\n\n       INSTALLED_APPS = (\n           # other apps\n           'django_q',\n       )\n\n-  Run Django migrations to create the database tables::\n\n    $ python manage.py migrate\n\n-  Choose a message `broker \u003chttps://django-q.readthedocs.org/en/latest/brokers.html\u003e`__ , configure and install the appropriate client library.\n\nRead the full documentation at `https://django-q.readthedocs.org \u003chttps://django-q.readthedocs.org\u003e`__\n\n\nConfiguration\n~~~~~~~~~~~~~\n\nAll configuration settings are optional. e.g:\n\n.. code:: python\n\n    # settings.py example\n    Q_CLUSTER = {\n        'name': 'myproject',\n        'workers': 8,\n        'recycle': 500,\n        'timeout': 60,\n        'compress': True,\n        'cpu_affinity': 1,\n        'save_limit': 250,\n        'queue_limit': 500,\n        'label': 'Django Q',\n        'redis': {\n            'host': '127.0.0.1',\n            'port': 6379,\n            'db': 0, }\n    }\n\nFor full configuration options, see the `configuration documentation \u003chttps://django-q.readthedocs.org/en/latest/configure.html\u003e`__.\n\nManagement Commands\n~~~~~~~~~~~~~~~~~~~\n\nStart a cluster with::\n\n    $ python manage.py qcluster\n\nMonitor your clusters with::\n\n    $ python manage.py qmonitor\n\nMonitor your clusters' memory usage with::\n\n    $ python manage.py qmemory\n\nCheck overall statistics with::\n\n    $ python manage.py qinfo\n\nCreating Tasks\n~~~~~~~~~~~~~~\n\nUse `async_task` from your code to quickly offload tasks:\n\n.. code:: python\n\n    from django_q.tasks import async_task, result\n\n    # create the task\n    async_task('math.copysign', 2, -2)\n\n    # or with a reference\n    import math.copysign\n\n    task_id = async_task(copysign, 2, -2)\n\n    # get the result\n    task_result = result(task_id)\n\n    # result returns None if the task has not been executed yet\n    # you can wait for it\n    task_result = result(task_id, 200)\n\n    # but in most cases you will want to use a hook:\n\n    async_task('math.modf', 2.5, hook='hooks.print_result')\n\n    # hooks.py\n    def print_result(task):\n        print(task.result)\n\nFor more info see `Tasks \u003chttps://django-q.readthedocs.org/en/latest/tasks.html\u003e`__\n\n\nSchedule\n~~~~~~~~\n\nSchedules are regular Django models. You can manage them through the\nAdmin page or directly from your code:\n\n.. code:: python\n\n    # Use the schedule function\n    from django_q.tasks import schedule\n\n    schedule('math.copysign',\n             2, -2,\n             hook='hooks.print_result',\n             schedule_type=Schedule.DAILY)\n\n    # Or create the object directly\n    from django_q.models import Schedule\n\n    Schedule.objects.create(func='math.copysign',\n                            hook='hooks.print_result',\n                            args='2,-2',\n                            schedule_type=Schedule.DAILY\n                            )\n\n    # Run a task every 5 minutes, starting at 6 today\n    # for 2 hours\n    import arrow\n\n    schedule('math.hypot',\n             3, 4,\n             schedule_type=Schedule.MINUTES,\n             minutes=5,\n             repeats=24,\n             next_run=arrow.utcnow().replace(hour=18, minute=0))\n\n    # Use a cron expression\n    schedule('math.hypot',\n             3, 4,\n             schedule_type=Schedule.CRON,\n             cron = '0 22 * * 1-5')\n\nFor more info check the `Schedules \u003chttps://django-q.readthedocs.org/en/latest/schedules.html\u003e`__ documentation.\n\n\nTesting\n~~~~~~~\n\nTo run the tests you will need the following in addition to install requirements:\n\n* `py.test \u003chttp://pytest.org/latest/\u003e`__\n* `pytest-django \u003chttps://github.com/pytest-dev/pytest-django\u003e`__\n* Disque from https://github.com/antirez/disque.git\n* Redis\n* MongoDB\n\nOr you can use the included Docker Compose file.\n\nThe following commands can be used to run the tests:\n\n.. code:: bash\n\n    # Create virtual environment\n    python -m venv venv\n\n    # Install requirements\n    venv/bin/pip install -r requirements.txt\n\n    # Install test dependencies\n    venv/bin/pip install pytest pytest-django\n\n    # Install django-q\n    venv/bin/python setup.py develop\n\n    # Run required services (you need to have docker-compose installed)\n    docker-compose -f test-services-docker-compose.yaml up -d\n\n    # Run tests\n    venv/bin/pytest\n\n    # Stop the services required by tests (when you no longer plan to run tests)\n    docker-compose -f test-services-docker-compose.yaml down\n\nLocale\n~~~~~~\n\nCurrently available in English, German and French.\nTranslation pull requests are always welcome.\n\nTodo\n~~~~\n\n-  Better tests and coverage\n-  Less dependencies?\n\nAcknowledgements\n~~~~~~~~~~~~~~~~\n\n-  Django Q was inspired by working with\n   `Django-RQ \u003chttps://github.com/ui/django-rq\u003e`__ and\n   `RQ \u003chttps://github.com/ui/django-rq\u003e`__\n-  Human readable hashes by\n   `HumanHash \u003chttps://github.com/zacharyvoase/humanhash\u003e`__\n-  Redditors feedback at `r/django \u003chttps://www.reddit.com/r/django/\u003e`__\n\n-  JetBrains for their `Open Source Support Program \u003chttps://www.jetbrains.com/community/opensource\u003e`__\n\n.. |image0| image:: https://github.com/koed00/django-q/workflows/Tests/badge.svg?branche=master\n   :target: https://github.com/Koed00/django-q/actions?query=workflow%3Atests\n.. |image1| image:: http://codecov.io/github/Koed00/django-q/coverage.svg?branch=master\n   :target: http://codecov.io/github/Koed00/django-q?branch=master\n.. |image2| image:: http://badges.gitter.im/Join%20Chat.svg\n   :target: https://gitter.im/Koed00/django-q\n.. |docs| image:: https://readthedocs.org/projects/docs/badge/?version=latest\n    :alt: Documentation Status\n    :scale: 100\n    :target: https://django-q.readthedocs.org/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FKoed00%2Fdjango-q","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FKoed00%2Fdjango-q","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FKoed00%2Fdjango-q/lists"}