# tsdeque — Thread-Safe Deque with Task Tracking ⚙️
---
## English
**tsdeque** is a thread-safe, double-ended queue implementation with built-in task tracking and threshold-based event notifications. Designed for multi-threaded environments, it ensures safe concurrent access and precise control over queue size and task completion status.
### Features
- Thread-safe double-ended queue (`deque`) operations
- Support for max size limitation with blocking `put` operations
- Task counting with `task_done()` and `join()` methods, similar to `queue.Queue`
- Threshold events triggered on hitting min/max counts
- Customizable blocking timeouts on put/get operations
- Designed with performance and correctness in mind
### Installation
```bash
pip install tsdeque
````
### Usage example
```python
from tsdeque import ThreadSafeDeque
deque = ThreadSafeDeque(maxsize=5)
deque.put("item")
item = deque.get()
deque.task_done()
deque.join()
```
### Testing 🧪
Run tests with:
```bash
python -m pytest
```
---
## Русский
**tsdeque** — потокобезопасная двухсторонняя очередь с учетом количества задач и триггерами событий на пороговых значениях. Подходит для многопоточного программирования, гарантирует корректный доступ и управление размером очереди и состоянием задач.
### Возможности
* Потокобезопасные операции с двухсторонней очередью (`deque`)
* Поддержка ограничения по максимальному размеру с блокирующими операциями `put`
* Подсчет задач с методами `task_done()` и `join()`, аналогично `queue.Queue`
* События срабатывают при достижении минимальных и максимальных порогов
* Настраиваемые таймауты блокирующих операций
* Оптимизирован для производительности и надежности
### Установка
```bash
pip install tsdeque
```
### Пример использования
```python
from tsdeque import ThreadSafeDeque
deque = ThreadSafeDeque(maxsize=5)
deque.put("item")
item = deque.get()
deque.task_done()
deque.join()
```
### Тестирование 🧪
Запуск тестов:
```bash
python -m pytest
```
---
Raw data
{
"_id": null,
"home_page": null,
"name": "tsdeque",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "deque, thread-safe, concurrency, multithreading, queue",
"author": null,
"author_email": "kotmarkot <andrey.patrusov@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/06/04/661d026fb46490e2e5511493ebc10591f5b7bae658f5379996f41e381f31/tsdeque-1.0.1.tar.gz",
"platform": null,
"description": "# tsdeque \u2014 Thread-Safe Deque with Task Tracking \u2699\ufe0f\n\n---\n\n## English\n\n**tsdeque** is a thread-safe, double-ended queue implementation with built-in task tracking and threshold-based event notifications. Designed for multi-threaded environments, it ensures safe concurrent access and precise control over queue size and task completion status.\n\n### Features\n- Thread-safe double-ended queue (`deque`) operations \n- Support for max size limitation with blocking `put` operations \n- Task counting with `task_done()` and `join()` methods, similar to `queue.Queue` \n- Threshold events triggered on hitting min/max counts \n- Customizable blocking timeouts on put/get operations \n- Designed with performance and correctness in mind \n\n### Installation\n```bash\npip install tsdeque\n````\n\n### Usage example\n\n```python\nfrom tsdeque import ThreadSafeDeque\n\ndeque = ThreadSafeDeque(maxsize=5)\ndeque.put(\"item\")\nitem = deque.get()\ndeque.task_done()\ndeque.join()\n```\n\n### Testing \ud83e\uddea\n\nRun tests with:\n\n```bash\npython -m pytest\n```\n\n---\n\n## \u0420\u0443\u0441\u0441\u043a\u0438\u0439\n\n**tsdeque** \u2014 \u043f\u043e\u0442\u043e\u043a\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0430\u044f \u0434\u0432\u0443\u0445\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u044f\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u0434\u0430\u0447 \u0438 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u043c\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0430 \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445. \u041f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u0437\u0430\u0434\u0430\u0447.\n\n### \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438\n\n* \u041f\u043e\u0442\u043e\u043a\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0434\u0432\u0443\u0445\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u044e (`deque`)\n* \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0441 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438 `put`\n* \u041f\u043e\u0434\u0441\u0447\u0435\u0442 \u0437\u0430\u0434\u0430\u0447 \u0441 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 `task_done()` \u0438 `join()`, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e `queue.Queue`\n* \u0421\u043e\u0431\u044b\u0442\u0438\u044f \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0440\u043e\u0433\u043e\u0432\n* \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u044b \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439\n* \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u0438\n\n### \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\n\n```bash\npip install tsdeque\n```\n\n### \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f\n\n```python\nfrom tsdeque import ThreadSafeDeque\n\ndeque = ThreadSafeDeque(maxsize=5)\ndeque.put(\"item\")\nitem = deque.get()\ndeque.task_done()\ndeque.join()\n```\n\n### \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \ud83e\uddea\n\n\u0417\u0430\u043f\u0443\u0441\u043a \u0442\u0435\u0441\u0442\u043e\u0432:\n\n```bash\npython -m pytest\n```\n\n---\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Thread-safe double-ended queue",
"version": "1.0.1",
"project_urls": {
"Homepage": "https://github.com/PATRUSOV/python-thread-safe-deque"
},
"split_keywords": [
"deque",
" thread-safe",
" concurrency",
" multithreading",
" queue"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "903dbe09a284447758b338f874f213e1700731a2d09cb2f3f1e648d5ba8fcb17",
"md5": "c509b3c90db07864d77a780d3b7553d9",
"sha256": "f4cdd8b87248bbea9d6db809d2b70a1500dc114a8123b4ce596903c11084b3b1"
},
"downloads": -1,
"filename": "tsdeque-1.0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c509b3c90db07864d77a780d3b7553d9",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 10143,
"upload_time": "2025-08-01T16:44:49",
"upload_time_iso_8601": "2025-08-01T16:44:49.266414Z",
"url": "https://files.pythonhosted.org/packages/90/3d/be09a284447758b338f874f213e1700731a2d09cb2f3f1e648d5ba8fcb17/tsdeque-1.0.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0604661d026fb46490e2e5511493ebc10591f5b7bae658f5379996f41e381f31",
"md5": "dc64f4c2a7901ae4d28e2b72013196b3",
"sha256": "e932d5f015e66679a783dc250c8cff862d6f8238cfa2def430e9586c5a64bc78"
},
"downloads": -1,
"filename": "tsdeque-1.0.1.tar.gz",
"has_sig": false,
"md5_digest": "dc64f4c2a7901ae4d28e2b72013196b3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 11598,
"upload_time": "2025-08-01T16:44:50",
"upload_time_iso_8601": "2025-08-01T16:44:50.777483Z",
"url": "https://files.pythonhosted.org/packages/06/04/661d026fb46490e2e5511493ebc10591f5b7bae658f5379996f41e381f31/tsdeque-1.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-01 16:44:50",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "PATRUSOV",
"github_project": "python-thread-safe-deque",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "pytest",
"specs": []
}
],
"lcname": "tsdeque"
}