Skip to main content

Pure asyncio actor framework for Python

Project description

async-pykka

Asyncio-First Python Actor Model Framework

Python Concurrency License CI

中文 | English


async-pykka is a pure asyncio framework that implements the Actor model, inspired by Pykka-style APIs and focused on high-throughput I/O workloads.

Quick Start Example | Scenarios | Performance | FAQ

[!IMPORTANT] Same-loop constraint All actor operations must run in the same event loop. Cross-thread or cross-loop calls fail fast with RuntimeError.

✨ Highlights

  • Familiar Actor model API: start / proxy / ask / tell / stop
  • Asyncio-first scheduling with no actor thread pool dependency
  • Built-in async proxy and registry utilities for large actor sets
  • Deterministic loop-bound safety model for production debugging

🚀 Quick Start

uv venv
uv sync --group dev
uv run python examples/quickstart_counter.py
uv run pytest -q

Expected output: counter=5

🧩 Minimal Example

import asyncio
import async_pykka


class GreeterActor(async_pykka.AsyncioActor):
    def __init__(self, name: str):
        super().__init__()
        self.name = name

    async def greet(self) -> str:
        return f"Hello, {self.name}!"


async def main() -> None:
    ref = GreeterActor.start("World")
    proxy = ref.proxy()

    message = await proxy.greet()
    print(message)

    await ref.stop()


if __name__ == "__main__":
    asyncio.run(main())

📦 Core API

API Description
AsyncioActor Actor base class
ActorRef.tell(msg) Fire-and-forget message send
ActorRef.ask(msg) Request-response Future
ActorRef.proxy() Async proxy facade
ActorProxy.set(name, value) Safe actor state mutation
ActorRegistry.stop_all() Graceful batch shutdown
Future.get(timeout=...) Timeout-aware await

🧠 Common Patterns

Request/Response with timeout

future = ref.ask({"type": "query", "key": "profile"})
result = await future.get(timeout=1.0)

Notify queue + batch handling

Put high-frequency notify events into a queue, then consume in batches.

Runnable example: examples/notify_batch.py

Graceful shutdown

results = await async_pykka.ActorRegistry.stop_all(current_loop_only=True)
assert all(results)

⚡ Network I/O A/B Benchmark

Run A/B benchmark against upstream pykka:

uv sync --group dev --group bench
./scripts/fetch_pykka_repo.sh
uv run python examples/benchmark_network_ab.py --actors 50 --requests 5000 --concurrency 200 --rounds 3

Benchmark setup (2026-03-06): actors=50, requests=5000, concurrency=200, payload_bytes=256, rounds=3, localhost TCP echo server.

Throughput p95 Latency
Metric (avg over 3 rounds) async-pykka pykka Delta
Throughput (req/s) 29999.08 14514.66 +106.68%
Mean latency (ms) 5.3951 11.9221 54.75% lower
p95 latency (ms) 6.6906 13.9568 52.06% lower
p99 latency (ms) 11.8346 20.5744 42.48% lower

📚 Documentation

🛠 Development

uv sync --group dev
uv run ruff check .
uv run pytest -q

🙏 Attribution

This project is inspired by async proposals around Pykka and further adapted into a standalone asyncio-first framework.

See: ACKNOWLEDGEMENTS.md, THIRD_PARTY_NOTICES.md

📄 License

MIT. See LICENSE.

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

async_pykka-0.1.2.tar.gz (39.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

async_pykka-0.1.2-py3-none-any.whl (29.6 kB view details)

Uploaded Python 3

File details

Details for the file async_pykka-0.1.2.tar.gz.

File metadata

  • Download URL: async_pykka-0.1.2.tar.gz
  • Upload date:
  • Size: 39.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for async_pykka-0.1.2.tar.gz
Algorithm Hash digest
SHA256 08a955bfbbe308ce69450f6effdb3c8db79ac65e25f57e3a61527e1c746ac13b
MD5 3e50e90ea19f404c8e8d2598851e570f
BLAKE2b-256 7f610468fb382a622f55e75a2c1b4b006cfa281fbbb546f0e32dbc6de4fc8ffc

See more details on using hashes here.

File details

Details for the file async_pykka-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: async_pykka-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 29.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for async_pykka-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 30efb181d31be5e616c8bb7fc703a1cd2c016e9b9d55f2bae85f202a96d2e328
MD5 32490b611aab367cf10fcbc20dd5b823
BLAKE2b-256 39d0fb7548c79c164321336d6e23b0b2b9f8ce2a69d46d1674edfa30bc0419ce

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