Go style CSP for Python
Project description
Forechan
go style asyncio
channels.
Fully Typed with Generics, mypy
ready.
Inspired by core.async
from clojure.
Examples
Send & Recv
ch = chan(int) # Chan[int]
await (ch << 2) # or use `await ch.send(x)`
two = await ([] << ch) # or use `await ch.recv()`
assert two == 2
# `ch.close()` is idempotent
await ch.close()
Basic
if ch:
# if `Chan[T]` is open
len(ch) # How many items are in `ch`
async with ch:
# close `ch` after exiting lexical-scope
async for item in ch:
# use `ch` as AsyncIterator
Select
async for ch, item in select(ch1, ch2, ch3, ...):
if ch == ch1:
...
elif ch == ch2:
...
elif ch == ch3:
...
Wait Group
wg = wait_group()
for _ in range(5):
async def cont() -> None:
with wg:
# do some work
create_task(cont())
# will wait for all work to be completed
await wg.wait()
Synchronous
head = ch.try_peek() # can throw `ChanEmpty`
(ch < 2) # or use `ch.try_send(2)` , can throw `ChanFull`
two = ([] < ch) # or use `ch.try_recv()` , can throw `ChanEmpty`
assert two == 2
Go -> Python
The following are roughly equivalent
func fn() {
// do things here
}
go fn()
When GOMAXPROCS=1
async def fn() -> None:
# do things here
create_task(fn())
Common Concurrency Patterns
Consumer
async def consumer() -> None:
async for item in ch:
# do something with `item`, until `ch` is closed
Producer
def producer() -> Chan[int]:
ch = chan(int)
async def cont() -> None:
# auto close `ch` when done
async with ch:
while ...:
# send result `item` to downstream `ch`
await (ch << item)
create_task(cont())
return ch
Series of Tubes
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
forechan-0.2.10.tar.gz
(9.2 kB
view details)
Built Distribution
forechan-0.2.10-py3-none-any.whl
(12.0 kB
view details)
File details
Details for the file forechan-0.2.10.tar.gz
.
File metadata
- Download URL: forechan-0.2.10.tar.gz
- Upload date:
- Size: 9.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/52.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8274b46e92b6f5bb0d87e0223edf58bd9a901c96cb98c922ec7eeee0af7615b7 |
|
MD5 | 3ea51436e9401989c69fbb10290f98b9 |
|
BLAKE2b-256 | 21e899bd2dc81d01587552ee7a81f896edaf5ae6d0c44a6085ef4c1b841ae03b |
File details
Details for the file forechan-0.2.10-py3-none-any.whl
.
File metadata
- Download URL: forechan-0.2.10-py3-none-any.whl
- Upload date:
- Size: 12.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/52.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 824dc45021a8ff00cf554a97cdb12bef8665d75c43b74b990b27d9e2f10ce897 |
|
MD5 | 7103438cd17dc1361479f09fdc93a8ca |
|
BLAKE2b-256 | eee5a4bbb6793382618ffcfefb132268525d698fd7deb58c8d8f33491044257e |