{ "info": { "author": "Ilan Steemers", "author_email": "koed0@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: MacOS", "Operating System :: POSIX", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Internet :: WWW/HTTP", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": ".. 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 and repeated tasks\n- Encrypted 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 support\n\nRequirements\n~~~~~~~~~~~~\n\n- `Django `__ > = 1.8\n- `Django-picklefield `__\n- `Arrow `__\n- `Blessed `__\n\nTested with: Python 2.7 & 3.6. Django 1.8.18, 1.10.7 and 1.11\n\nBrokers\n~~~~~~~\n- `Redis `__\n- `Disque `__\n- `IronMQ `__\n- `Amazon SQS `__\n- `MongoDB `__\n- `Django ORM `__\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 `__ , configure and install the appropriate client library.\n\nRead the full documentation at `https://django-q.readthedocs.org `__\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 `__.\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\nCheck overall statistics with::\n\n $ python manage.py qinfo\n\nCreating Tasks\n~~~~~~~~~~~~~~\n\nUse `async` from your code to quickly offload tasks:\n\n.. code:: python\n\n from django_q.tasks import async, result\n\n # create the task\n async('math.copysign', 2, -2)\n\n # or with a reference\n import math.copysign\n\n task_id = async(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('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 `__\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\nFor more info check the `Schedules `__ documentation.\n\n\nTesting\n~~~~~~~\n\nTo run the tests you will need `py.test `__ and `pytest-django `__\n\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 `__ and\n `RQ `__\n- Human readable hashes by\n `HumanHash `__\n- Redditors feedback at `r/django `__\n\n.. |image0| image:: https://travis-ci.org/Koed00/django-q.svg?branch=master\n :target: https://travis-ci.org/Koed00/django-q\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/", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://django-q.readthedocs.org", "keywords": "django distributed task queue worker scheduler cron redis disque ironmq sqs orm mongodb multiprocessing rollbar", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "livingbio-django-q", "package_url": "https://pypi.org/project/livingbio-django-q/", "platform": "", "project_url": "https://pypi.org/project/livingbio-django-q/", "project_urls": { "Homepage": "https://django-q.readthedocs.org" }, "release_url": "https://pypi.org/project/livingbio-django-q/0.8.5/", "requires_dist": null, "requires_python": "", "summary": "A multiprocessing distributed task queue for Django", "version": "0.8.5" }, "last_serial": 3392943, "releases": { "0.8.1": [ { "comment_text": "", "digests": { "md5": "f53d6379bb0d150d8b562936258ca053", "sha256": "555ec1e980384f2e923b24c501ac53686a3c300000febc420c71d25c23d5f94d" }, "downloads": -1, "filename": "livingbio-django-q-0.8.1.tar.gz", "has_sig": false, "md5_digest": "f53d6379bb0d150d8b562936258ca053", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39240, "upload_time": "2017-12-05T06:30:17", "url": "https://files.pythonhosted.org/packages/a3/aa/b68ccb11bffad3e2fc34842e0a3a3b4a391fc3e5cb73a5eec85342f166a4/livingbio-django-q-0.8.1.tar.gz" } ], "0.8.2": [ { "comment_text": "", "digests": { "md5": "43617c3091b1eb94e81671f615009307", "sha256": "134c71e3c714a5b4ec34adc7cecd30ecbc4835986813e43c33cc974ee85e828d" }, "downloads": -1, "filename": "livingbio-django-q-0.8.2.tar.gz", "has_sig": false, "md5_digest": "43617c3091b1eb94e81671f615009307", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39266, "upload_time": "2017-12-06T05:03:57", "url": "https://files.pythonhosted.org/packages/aa/fa/00cd62f9dd06f4e5e81b1d7f9d748be972dc71f5a42a215434ae7b11a92c/livingbio-django-q-0.8.2.tar.gz" } ], "0.8.3": [ { "comment_text": "", "digests": { "md5": "a5b1343cdd952f627ee233efe7f639e6", "sha256": "60bac0ae1686866d5f9ddfebb8e7a557231967d6cd0c2f81c7b7507859817197" }, "downloads": -1, "filename": "livingbio-django-q-0.8.3.tar.gz", "has_sig": false, "md5_digest": "a5b1343cdd952f627ee233efe7f639e6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39270, "upload_time": "2017-12-06T05:08:17", "url": "https://files.pythonhosted.org/packages/8b/e8/bacfad49de0658501b0ad789ad16d2b741a338c58ed4d48cce235cd3ae5b/livingbio-django-q-0.8.3.tar.gz" } ], "0.8.4": [ { "comment_text": "", "digests": { "md5": "bb256140552148756caf6d85188bc2ad", "sha256": "f3021accfff8701e2ab76eae0467e35d3d15524af81cea70abdd1a294f605e66" }, "downloads": -1, "filename": "livingbio-django-q-0.8.4.tar.gz", "has_sig": false, "md5_digest": "bb256140552148756caf6d85188bc2ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39268, "upload_time": "2017-12-06T05:18:50", "url": "https://files.pythonhosted.org/packages/ed/ae/e666f15be6580e00e2196d56a759d8f492f06250aaca2cf3eb5fc55a9826/livingbio-django-q-0.8.4.tar.gz" } ], "0.8.5": [ { "comment_text": "", "digests": { "md5": "fb8ad1084e166b0ad679956f31788021", "sha256": "38dea48862bcb6af44867e5a3e694e89ec9832de4131c3ffee1bfa965c2b176f" }, "downloads": -1, "filename": "livingbio-django-q-0.8.5.tar.gz", "has_sig": false, "md5_digest": "fb8ad1084e166b0ad679956f31788021", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39255, "upload_time": "2017-12-06T05:21:49", "url": "https://files.pythonhosted.org/packages/0c/0d/c56a998e8d7c40e12f02dfa531b621f149c6783b5e242b5836bc37e381f6/livingbio-django-q-0.8.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "fb8ad1084e166b0ad679956f31788021", "sha256": "38dea48862bcb6af44867e5a3e694e89ec9832de4131c3ffee1bfa965c2b176f" }, "downloads": -1, "filename": "livingbio-django-q-0.8.5.tar.gz", "has_sig": false, "md5_digest": "fb8ad1084e166b0ad679956f31788021", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39255, "upload_time": "2017-12-06T05:21:49", "url": "https://files.pythonhosted.org/packages/0c/0d/c56a998e8d7c40e12f02dfa531b621f149c6783b5e242b5836bc37e381f6/livingbio-django-q-0.8.5.tar.gz" } ] }