47 lines
1.1 KiB
Python
47 lines
1.1 KiB
Python
# spinner_asyncio2.py
|
|
|
|
# credits: Example by Luciano Ramalho inspired by
|
|
# Michele Simionato's multiprocessing example
|
|
# source:
|
|
# http://python-3-patterns-idioms-test.readthedocs.org/en/latest/CoroutinesAndConcurrency.html
|
|
|
|
import sys
|
|
import asyncio
|
|
|
|
DELAY = 0.1
|
|
DISPLAY = '|/-\\'
|
|
|
|
@asyncio.coroutine
|
|
def spinner_func(before='', after=''):
|
|
write, flush = sys.stdout.write, sys.stdout.flush
|
|
while True:
|
|
for char in DISPLAY:
|
|
msg = '{} {} {}'.format(before, char, after)
|
|
write(msg)
|
|
flush()
|
|
write('\x08' * len(msg))
|
|
try:
|
|
yield from asyncio.sleep(DELAY)
|
|
except asyncio.CancelledError:
|
|
return
|
|
|
|
|
|
@asyncio.coroutine
|
|
def long_computation(delay):
|
|
# emulate a long computation
|
|
yield from asyncio.sleep(delay)
|
|
|
|
|
|
@asyncio.coroutine
|
|
def supervisor(delay):
|
|
spinner = loop.create_task(spinner_func('Please wait...', 'thinking!'))
|
|
yield from long_computation(delay)
|
|
spinner.cancel()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
loop = asyncio.get_event_loop()
|
|
loop.run_until_complete(supervisor(3))
|
|
loop.close()
|
|
|