<!-- `quesadilla` - an elegant background task queue for the more civilized age
Copyright (C) 2024 Artur Ciesielski <artur.ciesielski@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. -->
[![pipeline status](https://gitlab.com/arcanery/python/quesadilla/quesadilla/badges/main/pipeline.svg)](https://gitlab.com/arcanery/python/quesadilla/quesadilla/-/commits/main)
[![coverage report](https://gitlab.com/arcanery/python/quesadilla/quesadilla/badges/main/coverage.svg)](https://gitlab.com/arcanery/python/quesadilla/quesadilla/-/commits/main)
[![latest release](https://gitlab.com/arcanery/python/quesadilla/quesadilla/-/badges/release.svg)](https://gitlab.com/arcanery/python/quesadilla/quesadilla/-/releases)
# quesadilla
`quesadilla` is an elegant background task queue for the more civilized age.
## Example usage
First, install `quesadilla`: `pip install quesadilla==0.5.0`.
`tasks.py`:
```python
import logging
import random
from quesadilla.connectors.in_memory import ThreadSafeInMemoryConnector
from quesadilla.core import TaskNamespace, async_task, sync_task
logging.basicConfig(level=logging.INFO)
namespace = TaskNamespace("tasks", connector=ThreadSafeInMemoryConnector())
queue = namespace.queue("queue")
@sync_task(queue)
def simple_task(i: int) -> bool:
return i == 0
@async_task(queue)
async def simple_atask(i: int) -> bool:
return i == 0
# simulate someone adding jobs to the queue
# queue is preloaded with 200 tasks
for _ in range(100):
simple_task.queue(random.choice((0, 1)))
simple_atask.queue(random.choice((0, 1)))
```
Run with `python -m quesadilla runners listener tasks::queue`.
Exit with `SIGINT` (Ctrl + C) or `SIGTERM`.
## Roadmap
- support for retrying failed tasks
- support for cronjobs and heartbeat
- support for task priority
- support for delayed execution
- documentation
- a real-world connector! (most likely PostgreSQL with `psycopg` and `SQLAlchemy 2.0`)
Raw data
{
"_id": null,
"home_page": "https://gitlab.com/arcanery/python/quesadilla/quesadilla",
"name": "quesadilla",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.12",
"maintainer_email": null,
"keywords": "job, task, queue, async, actor",
"author": "Artur Ciesielski",
"author_email": "artur.ciesielski@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/dc/4a/1810351beaaf9db56e49056c67a11b91775677d0c2d6249fc76f31a94c53/quesadilla-0.5.0.post1.tar.gz",
"platform": null,
"description": "<!-- `quesadilla` - an elegant background task queue for the more civilized age\nCopyright (C) 2024 Artur Ciesielski <artur.ciesielski@gmail.com>\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program. If not, see <https://www.gnu.org/licenses/>. -->\n\n[![pipeline status](https://gitlab.com/arcanery/python/quesadilla/quesadilla/badges/main/pipeline.svg)](https://gitlab.com/arcanery/python/quesadilla/quesadilla/-/commits/main)\n[![coverage report](https://gitlab.com/arcanery/python/quesadilla/quesadilla/badges/main/coverage.svg)](https://gitlab.com/arcanery/python/quesadilla/quesadilla/-/commits/main)\n[![latest release](https://gitlab.com/arcanery/python/quesadilla/quesadilla/-/badges/release.svg)](https://gitlab.com/arcanery/python/quesadilla/quesadilla/-/releases)\n\n# quesadilla\n\n`quesadilla` is an elegant background task queue for the more civilized age.\n\n## Example usage\n\nFirst, install `quesadilla`: `pip install quesadilla==0.5.0`.\n\n`tasks.py`:\n\n```python\nimport logging\nimport random\n\nfrom quesadilla.connectors.in_memory import ThreadSafeInMemoryConnector\nfrom quesadilla.core import TaskNamespace, async_task, sync_task\n\nlogging.basicConfig(level=logging.INFO)\n\nnamespace = TaskNamespace(\"tasks\", connector=ThreadSafeInMemoryConnector())\nqueue = namespace.queue(\"queue\")\n\n\n@sync_task(queue)\ndef simple_task(i: int) -> bool:\n return i == 0\n\n\n@async_task(queue)\nasync def simple_atask(i: int) -> bool:\n return i == 0\n\n\n# simulate someone adding jobs to the queue\n# queue is preloaded with 200 tasks\nfor _ in range(100):\n simple_task.queue(random.choice((0, 1)))\n simple_atask.queue(random.choice((0, 1)))\n```\n\nRun with `python -m quesadilla runners listener tasks::queue`.\n\nExit with `SIGINT` (Ctrl + C) or `SIGTERM`.\n\n## Roadmap\n\n- support for retrying failed tasks\n- support for cronjobs and heartbeat\n- support for task priority\n- support for delayed execution\n- documentation\n- a real-world connector! (most likely PostgreSQL with `psycopg` and `SQLAlchemy 2.0`)\n\n",
"bugtrack_url": null,
"license": "GPL-3.0-or-later",
"summary": "An elegant background task queue for the more civilized age",
"version": "0.5.0.post1",
"project_urls": {
"Documentation": "https://arcanery.gitlab.io/python/quesadilla/quesadilla/",
"Homepage": "https://gitlab.com/arcanery/python/quesadilla/quesadilla",
"Repository": "https://gitlab.com/arcanery/python/quesadilla/quesadilla"
},
"split_keywords": [
"job",
" task",
" queue",
" async",
" actor"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "79cd6509cb275e52a219a3b2b5daaca4097559bcbac293b82b276201c12b50c6",
"md5": "ada99934f987026d1771a0e99fca44f6",
"sha256": "bde0044e186d10ef5f214d7c5eda38829c58313a73c865eb167adb6a27bd2dcc"
},
"downloads": -1,
"filename": "quesadilla-0.5.0.post1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "ada99934f987026d1771a0e99fca44f6",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.12",
"size": 15424,
"upload_time": "2024-09-29T02:22:02",
"upload_time_iso_8601": "2024-09-29T02:22:02.220614Z",
"url": "https://files.pythonhosted.org/packages/79/cd/6509cb275e52a219a3b2b5daaca4097559bcbac293b82b276201c12b50c6/quesadilla-0.5.0.post1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "dc4a1810351beaaf9db56e49056c67a11b91775677d0c2d6249fc76f31a94c53",
"md5": "e95391774346fe40707ba56ba4b1ed46",
"sha256": "93705616409babda13498692676e1460d9d3019505f7ff75c5f19dc0e12b39a4"
},
"downloads": -1,
"filename": "quesadilla-0.5.0.post1.tar.gz",
"has_sig": false,
"md5_digest": "e95391774346fe40707ba56ba4b1ed46",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.12",
"size": 14891,
"upload_time": "2024-09-29T02:22:03",
"upload_time_iso_8601": "2024-09-29T02:22:03.243139Z",
"url": "https://files.pythonhosted.org/packages/dc/4a/1810351beaaf9db56e49056c67a11b91775677d0c2d6249fc76f31a94c53/quesadilla-0.5.0.post1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-09-29 02:22:03",
"github": false,
"gitlab": true,
"bitbucket": false,
"codeberg": false,
"gitlab_user": "arcanery",
"gitlab_project": "python",
"lcname": "quesadilla"
}