async-sync
async-sync — Elegantly convert between Python synchronous and asynchronous code
Features
- ✨ Simple and easy-to-use API
- 🔄 Seamlessly call async functions in synchronous code
- 🔄 Seamlessly call synchronous functions in async code
- 🧠 Intelligent handling of nested event loops
- 🛡️ Comprehensive type hints
- 📦 No external dependencies
Installation
pip install async-sync
Usage Examples
Convert async functions to sync functions
import async_sync
import asyncio
@async_sync.to_sync
async def synced_func():
await asyncio.sleep(1)
return "Hello from async world!"
# Can be called directly in synchronous code
print(synced_func()) # Output: Hello from async world!
# Also works in async code
async def main():
print(synced_func()) # Still works normally
asyncio.run(main())
Convert sync functions to async functions
import async_sync
import time
def blocking_func(name):
time.sleep(1) # Simulate time-consuming operation
return f"Hello, {name}!"
# Convert synchronous function to asynchronous
async_hello = async_sync.to_async(blocking_func)
# Use in async code
import asyncio
async def main():
# Can be called with await
result = await async_hello("World")
print(result) # Output: Hello, World!
# Can be called concurrently
results = await asyncio.gather(
async_hello("Alice"),
async_hello("Bob"),
async_hello("Charlie")
)
print(results) # Output: ['Hello, Alice!', 'Hello, Bob!', 'Hello, Charlie!']
asyncio.run(main())
Directly run coroutines or sync functions
import async_sync
import asyncio
import time
# Run coroutines in synchronous code
async def fetch_data():
await asyncio.sleep(1)
return "Data fetched"
data = async_sync.run_async_in_sync(fetch_data())
print(data) # Output: Data fetched
# Run synchronous functions in async code
async def main():
def cpu_intensive_task():
time.sleep(1) # Simulate CPU-intensive task
return "Task completed"
result = await async_sync.run_sync_in_async(cpu_intensive_task)
print(result) # Output: Task completed
asyncio.run(main())
Development
Install dependencies
uv sync
Run tests
uv run pytest
Commit
pre-commit install
cz commit
Release
cz bump
git push --follow-tags
Metadata
Release files for async-sync 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| async_sync-0.1.1.tar.gz | 18.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| async_sync-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 23.4 kB
Release files / async_sync-0.1.1.tar.gz
| Download URL | async_sync-0.1.1.tar.gz |
|---|---|
| Size | 18.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
746fa84b413b38a6697aef69d20a65a0c395e7500addbb28433f8458fc449b08
|
|
BLAKE2b-256 checksum How to use checksums |
6108b01b51690b52d621358106a41f3307164ed00e86675a968f9bff81dab356
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 9, 2025.
Transparency logRelease files / async_sync-0.1.1-py3-none-any.whl
| Download URL | async_sync-0.1.1-py3-none-any.whl |
|---|---|
| Size | 5.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2a5bc1460743291f83e146dc2679a1ed9d049cbdbd6d37132d64aa81b129c458
|
|
BLAKE2b-256 checksum How to use checksums |
de81fe14f3c68d0285b48035b8e2698b28b33c045a8bc5867d186039dcc6fb0a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 9, 2025.
Transparency log