Coroutines emulated with threads.
Project description
This module provides fake coroutines that are not coroutines but act like coroutines.
>>> from fake_coro import fake_coro, yield_
>>> @fake_coro
... def fib(limit):
... a, b = 1, 1
... while a < limit:
... yield_(a)
... a, b = b, a + b
>>> list(fib(10))
[1, 1, 2, 3, 5, 8]
Other features of classic coroutines are also supported:
>>> @fake_coro
... def my_coro():
... return 42
>>> next(my_coro())
Traceback (most recent call last):
...
StopIteration: 42
Also .send
, .throw
and .close
:
>>> @fake_coro
... def average():
... total = count = 0
... num = yield_()
... while True:
... total += num
... count += 1
... num = yield_(total / count)
>>> coro = average()
>>> next(coro)
>>> coro.send(1)
1.0
>>> coro.send(6)
3.5
>>> coro.close()
>>> coro.send(7)
Traceback (most recent call last):
...
StopIteration
And sub-coroutines:
>>> from fake_coro import yield_from
>>> @fake_coro
... def chain(*iterables):
... for iterable in iterables:
... yield_from(iterable)
>>> list(chain(range(3), range(5)))
[0, 1, 2, 0, 1, 2, 3, 4]
Fake coroutines are implemented by threads and obviously perform much worse than native classic coroutines. However, normal functions invoked by fake coroutines can also yield like coroutines:
>>> @fake_coro
... def foo():
... bar()
... yield_(2)
>>> def bar():
... yield_(1) # bar is not a coroutine but can yield!
>>> list(foo())
[1, 2]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
fake_coro-0.1.0.tar.gz
(4.6 kB
view hashes)
Built Distribution
Close
Hashes for fake_coro-0.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e095697653aee13578f16844d4f1c07d4311dcde8435b6afaac1b8ee5b3e950f |
|
MD5 | 352f1784dbd303e120c00400c0ed0cba |
|
BLAKE2b-256 | e5b6b4f08f003ddac0956944fdb48aa2882946826a8271f817c05941a59df224 |