Skip to main content

Tools for replacing `sync_to_async` calls to `sync_to_async(thread_sensitive=False, executor=...)`, effectively allowing Django to make calls to database concurrently

Project description

django_threaded_sync_to_async

Tools for replacing sync_to_async calls to sync_to_async(thread_sensitive=False, executor=...), effectively allowing Django to make calls to database concurrently.

pip3 install django_threaded_sync_to_async

Executor

import django_threaded_sync_to_async

async with django_threaded_sync_to_async.Executor(thread_name_prefix="thread", max_workers=3) as executor:
    a = asgiref.sync.sync_to_async(long_call)(1)
    b = asgiref.sync.sync_to_async(long_call)(2)
    c = asgiref.sync.sync_to_async(long_call)(3)
    d = asgiref.sync.sync_to_async(long_call)(4)
    await asyncio.gather(a, b, c, d)

SharedExecutor

Maintains global dictionary of executors (concurrent.futures.ThreadPoolExecutor) accessed by name and allows to limit utilization of executor for a single context.

import django_threaded_sync_to_async

@django_threaded_sync_to_async.SharedExecutor("common", max_workers=3, max_tasks=2)
async def operations():
    a = asgiref.sync.sync_to_async(long_call)(1)
    b = asgiref.sync.sync_to_async(long_call)(2)
    c = asgiref.sync.sync_to_async(long_call)(3)
    d = asgiref.sync.sync_to_async(long_call)(4)
    await asyncio.gather(a, b, c, d)

Project details


Download files

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

Source Distribution

django_threaded_sync_to_async-1.0.4.tar.gz (6.7 kB view details)

Uploaded Source

File details

Details for the file django_threaded_sync_to_async-1.0.4.tar.gz.

File metadata

File hashes

Hashes for django_threaded_sync_to_async-1.0.4.tar.gz
Algorithm Hash digest
SHA256 776cc51333d11d3669c690e2c2cb50ad81884cad718b1eb7f764f4db7ae097a1
MD5 f28e41fd8418252b9aafd72f629c5a07
BLAKE2b-256 09be051c54463ce4b88ff3cfcf15acf24b32ada0e237ff6a5c9d1ea95ab39669

See more details on using hashes here.

Supported by

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