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
Close
Hashes for django_threaded_sync_to_async-1.0.4.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 776cc51333d11d3669c690e2c2cb50ad81884cad718b1eb7f764f4db7ae097a1 |
|
MD5 | f28e41fd8418252b9aafd72f629c5a07 |
|
BLAKE2b-256 | 09be051c54463ce4b88ff3cfcf15acf24b32ada0e237ff6a5c9d1ea95ab39669 |