Metadata-Version: 2.1
Name: django_threaded_sync_to_async
Version: 1.0.4
Summary: Tools for replacing `sync_to_async` calls to `sync_to_async(thread_sensitive=False, executor=...)`, effectively allowing Django to make calls to database concurrently
Home-page: https://github.com/excitoon/django_threaded_sync_to_async
Author: Vladimir Chebotarev
Author-email: vladimir.chebotarev@gmail.com
License: MIT
Project-URL: Documentation, https://github.com/excitoon/django_threaded_sync_to_async/blob/master/README.md
Project-URL: Source, https://github.com/excitoon/django_threaded_sync_to_async
Project-URL: Tracker, https://github.com/excitoon/django_threaded_sync_to_async/issues
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`
        
        ```python3
        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.
        
        ```python3
        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)
        ```
        
Keywords: django,asyncio,asgiref,sync_to_async
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Software Development :: Version Control :: Git
Classifier: Topic :: Text Processing :: Filters
Description-Content-Type: text/markdown
