Getting Started
Welcome to pychanio, a concurrency library that brings Go-style channels and select semantics to Python's asyncio world.
This guide will help you get started with the core concepts, installation steps, and writing your first channel-based program in Python. Whether you're familiar with Go or completely new to channel-based concurrency, this guide aims to make pychanio accessible and intuitive.
What is pychanio?
pychanio?pychanio is a Python library designed to mimic Go's concurrency primitives:
Channels for coroutine-safe communication
Goroutines via
go(...)selectblocks for non-deterministic choice across multiple awaitablesNil channels that block forever
Sentinels like
DONE,CANCEL, andHEARTBEATfor control flow
With pychanio, you can write concurrent code that is expressive, safe, and idiomatic-leveraging Python's asyncio without callbacks or tangled task management.
Why use pychanio?
pychanio?Python's built-in asyncio.Queue is powerful but lacks Go-style channel semantics:
Explicit closing of queues
Backpressure via blocking sends
Separate send-only and receive-only views
Composable
selectblocks
pychanio builds on top of asyncio to provide:
Go-like concurrency in idiomatic Python
Simplified coordination between producers and consumers
Clearer patterns for cancellation and shutdown
Core Concepts
Fundamental operations with pychanio:
chan()
Creates a full-duplex channel (buffered/unbuffered)
ch << val
Asynchronously sends val into the channel
await ch.send()
Synchronously sends val into the channel
await ch.receive()
Receives a value from the channel
await (ch >> None)
Receives a value from the channel (DSL Syntax)
go(fn)
Spawns a coroutine in the background (like Go's go fn())
select(...)
Waits on multiple channels and executes the first ready handler
nil()
Creates a channel that blocks on all operations
When to Use It
Use pychanio when:
You're coordinating multiple async producers/consumers
You need fine-grained backpressure control
You want to fan-in or fan-out data across tasks
You want readable, Go-inspired concurrency in Python
Don't use it when:
You need multiprocessing or inter-process communication
You’re already using threading primitives (e.g.,
queue.Queue)
Next Chapter
In the next chapter, we'll walk through how to install pychanio and verify your environment is ready to write concurrent code using channels.
Last updated