demos enhanced during workshop at Garoa
This commit is contained in:
12
concurrency/Concurrency.mm
Normal file
12
concurrency/Concurrency.mm
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<map version="0.9.0">
|
||||||
|
<!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net -->
|
||||||
|
<node CREATED="1421704544481" ID="ID_1903556943" MODIFIED="1421714803674" TEXT="Concurrency">
|
||||||
|
<node CREATED="1421704705118" ID="ID_598225085" MODIFIED="1421714763865" POSITION="left" TEXT="threading"/>
|
||||||
|
<node CREATED="1421704717848" ID="ID_1699689274" MODIFIED="1421704738402" POSITION="left" TEXT="multiprocessing"/>
|
||||||
|
<node CREATED="1421704568997" ID="ID_48551069" MODIFIED="1421714690188" POSITION="left" TEXT="parallelism"/>
|
||||||
|
<node CREATED="1421705811900" ID="ID_740158806" MODIFIED="1421714796092" POSITION="right" TEXT="event-based">
|
||||||
|
<node CREATED="1421706014013" ID="ID_1223527993" MODIFIED="1421706021925" TEXT="callbacks"/>
|
||||||
|
<node CREATED="1421706028536" ID="ID_151937226" MODIFIED="1421706038694" TEXT="coroutines"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</map>
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
import asyncio
|
import asyncio
|
||||||
from aiohttp import web
|
from aiohttp import web
|
||||||
|
|
||||||
@@ -55,26 +56,28 @@ def handle(request):
|
|||||||
for word in sorted(EXAMPLE_WORDS, key=str.upper))
|
for word in sorted(EXAMPLE_WORDS, key=str.upper))
|
||||||
text = PAGE_TPL.format(query=query, result=res,
|
text = PAGE_TPL.format(query=query, result=res,
|
||||||
message=msg, links=links)
|
message=msg, links=links)
|
||||||
|
print('Sending {} results'.format(len(lines)))
|
||||||
return web.Response(content_type=CONTENT_TYPE, text=text)
|
return web.Response(content_type=CONTENT_TYPE, text=text)
|
||||||
|
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def init(loop):
|
def init(loop, address, port):
|
||||||
app = web.Application(loop=loop)
|
app = web.Application(loop=loop)
|
||||||
app.router.add_route('GET', '/', handle)
|
app.router.add_route('GET', '/', handle)
|
||||||
|
|
||||||
server = yield from loop.create_server(app.make_handler(),
|
server = yield from loop.create_server(app.make_handler(),
|
||||||
'127.0.0.1', 8080)
|
address, port)
|
||||||
host = server.sockets[0].getsockname()
|
host = server.sockets[0].getsockname()
|
||||||
print('Serving on {}. Hit CTRL-C to stop.'.format(host))
|
print('Serving on {}. Hit CTRL-C to stop.'.format(host))
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main(address="127.0.0.1", port=8888):
|
||||||
|
port = int(port)
|
||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
loop.run_until_complete(init(loop))
|
loop.run_until_complete(init(loop, address, port))
|
||||||
loop.run_forever()
|
loop.run_forever()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
index = UnicodeNameIndex()
|
index = UnicodeNameIndex()
|
||||||
main()
|
main(*sys.argv[1:])
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
from charfinder import UnicodeNameIndex
|
from charfinder import UnicodeNameIndex
|
||||||
@@ -13,8 +14,8 @@ index = None # a UnicodeNameIndex instance
|
|||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def handle_queries(reader, writer):
|
def handle_queries(reader, writer):
|
||||||
while True:
|
while True:
|
||||||
writer.write(PROMPT)
|
writer.write(PROMPT) # can't yield from!
|
||||||
yield from writer.drain()
|
yield from writer.drain() # must yield from!
|
||||||
data = yield from reader.readline()
|
data = yield from reader.readline()
|
||||||
try:
|
try:
|
||||||
query = data.decode().strip()
|
query = data.decode().strip()
|
||||||
@@ -29,15 +30,18 @@ def handle_queries(reader, writer):
|
|||||||
if lines:
|
if lines:
|
||||||
writer.writelines(line.encode() + CRLF for line in lines)
|
writer.writelines(line.encode() + CRLF for line in lines)
|
||||||
writer.write(index.status(query, len(lines)).encode() + CRLF)
|
writer.write(index.status(query, len(lines)).encode() + CRLF)
|
||||||
|
|
||||||
yield from writer.drain()
|
yield from writer.drain()
|
||||||
|
print('Sent {} results'.format(len(lines)))
|
||||||
|
|
||||||
print('Close the client socket')
|
print('Close the client socket')
|
||||||
writer.close()
|
writer.close()
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main(address='127.0.0.1', port=8888):
|
||||||
|
port = int(port)
|
||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
coro = asyncio.start_server(handle_queries, '127.0.0.1', 8888, loop=loop)
|
coro = asyncio.start_server(handle_queries, address, port, loop=loop)
|
||||||
server = loop.run_until_complete(coro)
|
server = loop.run_until_complete(coro)
|
||||||
|
|
||||||
host = server.sockets[0].getsockname()
|
host = server.sockets[0].getsockname()
|
||||||
@@ -54,4 +58,4 @@ def main():
|
|||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
index = UnicodeNameIndex()
|
index = UnicodeNameIndex()
|
||||||
main()
|
main(*sys.argv[1:])
|
||||||
|
|||||||
@@ -2,11 +2,9 @@ import asyncio
|
|||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def show_remaining():
|
def show_remaining():
|
||||||
remaining = 5
|
for remaining in range(5, 0, -1):
|
||||||
while remaining:
|
|
||||||
print('Remaining: ', remaining)
|
print('Remaining: ', remaining)
|
||||||
yield from asyncio.sleep(1)
|
yield from asyncio.sleep(1)
|
||||||
remaining -= 1
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
|
|||||||
29
concurrency/timer_clo.py
Normal file
29
concurrency/timer_clo.py
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import sys
|
||||||
|
import asyncio
|
||||||
|
|
||||||
|
def make_show_remaining(seconds):
|
||||||
|
remaining = seconds
|
||||||
|
|
||||||
|
def show_remaining(loop):
|
||||||
|
nonlocal remaining
|
||||||
|
print('Remaining: ', remaining)
|
||||||
|
remaining -= 1
|
||||||
|
if remaining:
|
||||||
|
loop.call_later(1, show_remaining, loop)
|
||||||
|
else:
|
||||||
|
loop.stop()
|
||||||
|
|
||||||
|
return show_remaining
|
||||||
|
|
||||||
|
|
||||||
|
def main(seconds=5):
|
||||||
|
seconds = int(seconds)
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
try:
|
||||||
|
loop.call_soon(make_show_remaining(seconds), loop)
|
||||||
|
loop.run_forever()
|
||||||
|
finally:
|
||||||
|
loop.close()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main(*sys.argv[1:])
|
||||||
8
concurrency/timer_seq.py
Normal file
8
concurrency/timer_seq.py
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import time
|
||||||
|
|
||||||
|
def main():
|
||||||
|
for remaining in range(5, 0, -1):
|
||||||
|
print('Remaining: ', remaining)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user