Skip to main content

Python async api for creating and managing queues in postgres

Travis CI PyPI version Documentation Status codecov Code style: black

Postgres is not best solution for storing and managing queues, but sometimes we have no choice.

async-pq can work with millions of entities and thousands of requests in one queue. Is used in production. So its well tested and stable.

Install

> pip install async-pq

Quick start

To work with async-pq we need asyncpg library:

import asyncpg

conn = await asyncpg.connect('postgresql://postgres@localhost/test')

QueueFabric.find_queue method will create needed tables (one for requests and one for messages) in database if it is new queue. Also it has is_exists_queue method for situations when you need to know that it is exists or not and will be the new queue.

from async_pq import Queue, QueueFabric

queue: Queue = await QueueFabric(conn).find_queue('items')

Operations with queue

Put new items (should be dumped JSONs) in queue:

await queue.put('{"id":1,"data":[1,2,3]}', '{"id":2,"data":[3,2,6]}')

Pop items from queue with some limit. It will create one request and return its id. It is useful when you want to use acknowledgement pattern:

# If with_ack=False (default from > 0.2.1), massage will be acknowledged in place automatically
request_id, data = await queue.pop(limit=2, with_ack=True)

To acknowledge request use ack method:

# returns False if request does not found or acked already
is_acked: bool = await queue.ack(request_id)

Or vice versa:

# returns False if request does not found or acked already
is_unacked: bool = await queue.unack(request_id)

You can return unacknowledged massages older than timeout seconds (default limit=1000 requests) to queue:

requests_number = await queue.return_unacked(timeout=300, limit=500)

Clean queue (delete acknowledged massages) to not overfill database with old data (default limit= messages of 1000 requests):

requests_number = await queue.clean_acked_queue(limit=500)

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

async-pq-0.3.1.tar.gz (3.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

async_pq-0.3.1-py3-none-any.whl (4.3 kB view details)

Uploaded Python 3

File details

Details for the file async-pq-0.3.1.tar.gz.

File metadata

  • Download URL: async-pq-0.3.1.tar.gz
  • Upload date:
  • Size: 3.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.18.4 setuptools/39.2.0 requests-toolbelt/0.8.0 tqdm/4.23.3 CPython/2.7.15

File hashes

Hashes for async-pq-0.3.1.tar.gz
Algorithm Hash digest
SHA256 d4fbeaa3ebae4d1477063f5687c51ecf53b78f7ce9d36b2115e194478e828d81
MD5 d594d72d0f5d4bc466482aa13c58f752
BLAKE2b-256 1f36cc3a3dc83523385a0f15e6b369d55297a3d47054a71b4777cee012b6b489

See more details on using hashes here.

File details

Details for the file async_pq-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: async_pq-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 4.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.18.4 setuptools/39.2.0 requests-toolbelt/0.8.0 tqdm/4.23.3 CPython/2.7.15

File hashes

Hashes for async_pq-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a94a54a7fc0ff398fe88d861cc7ec512a4dca1ef6689d564646bdf44e4417612
MD5 f8758d368c9e1b40b57bd4ab5f2e7264
BLAKE2b-256 f742366cf2b5d4b323cca3ce5d99407b42beeaa896ec07b6f42650a86dbe70d5

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.3.1 This release

2 files

0.3.0

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page