Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Dec 2, 2021. It is now read-only.

Commit f6a171f

Browse files
committed
spinner curio example in chapter 18b
1 parent 2832de1 commit f6a171f

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

‎18b-async-await/README.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Sample code for Chapter 18 - "Concurrency with asyncio"
1+
Refactored sample code for Chapter 18 - "Concurrency with asyncio"
22

33
From the book "Fluent Python" by Luciano Ramalho (O'Reilly, 2015)
44
http://shop.oreilly.com/product/0636920032519.do

‎18b-async-await/spinner_curio.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#!/usr/bin/env python3
2+
3+
# spinner_curio.py
4+
5+
# credits: Example by Luciano Ramalho inspired by
6+
# Michele Simionato's multiprocessing example in the python-list:
7+
# https://mail.python.org/pipermail/python-list/2009-February/538048.html
8+
9+
import curio
10+
11+
import itertools
12+
import sys
13+
14+
15+
async def spin(msg): # <1>
16+
write, flush = sys.stdout.write, sys.stdout.flush
17+
for char in itertools.cycle('|/-\\'):
18+
status = char + ' ' + msg
19+
write(status)
20+
flush()
21+
write('\x08' * len(status))
22+
try:
23+
await curio.sleep(.1) # <2>
24+
except curio.CancelledError: # <3>
25+
break
26+
write(' ' * len(status) + '\x08' * len(status))
27+
28+
29+
async def slow_function(): # <4>
30+
# pretend waiting a long time for I/O
31+
await curio.sleep(3) # <5>
32+
return 42
33+
34+
35+
async def supervisor(): # <6>
36+
spinner = await curio.spawn(spin('thinking!')) # <7>
37+
print('spinner object:\n ', repr(spinner)) # <8>
38+
result = await slow_function() # <9>
39+
await spinner.cancel() # <10>
40+
return result
41+
42+
43+
def main():
44+
result = curio.run(supervisor) # <12>
45+
print('Answer:', result)
46+
47+
48+
if __name__ == '__main__':
49+
main()

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /