Skip to main content

async-sync

中文文档

PyPI version Python Version License Downloads GitHub Stars GitHub Issues Dependencies


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)

Source distribution for async-sync 0.1.1
File Size Uploaded
async_sync-0.1.1.tar.gz 18.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for async-sync 0.1.1
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page