how async and await ended up in python
play

How async and await ended up in Python EuroPython 2018, Edinburgh - PowerPoint PPT Presentation

How async and await ended up in Python EuroPython 2018, Edinburgh Hello (: https:/ /www.hacksoft.io Django React Twitter: @pgergov_ Python is synchronous Request Response Threads Asynchronous asyncio hello_asyncio.py import asyncio


  1. How async and await ended up in Python EuroPython 2018, Edinburgh

  2. Hello (: https:/ /www.hacksoft.io Django React Twitter: @pgergov_

  3. Python is synchronous

  4. Request Response

  5. Threads

  6. Asynchronous

  7. asyncio

  8. hello_asyncio.py import asyncio async def hello_world_coroutine (delay): print ('Hello') await asyncio. sleep (delay) print (f'World, with delay: {delay}') loop = asyncio. get_event_loop () loop. create_task ( hello_world_coroutine (1)) loop. create_task ( hello_world_coroutine (2)) loop. run_forever ()

  9. Python 3.6.3 Hell Hello World, with delay 1 World, with delay 2

  10. hello_asyncio.py import asyncio async def hello_world_coroutine (delay): print ('Hello') await asyncio. sleep (delay) print (f'World, with delay: {delay}') loop = asyncio. get_event_loop () loop. create_task ( hello_world_coroutine (1)) loop. create_task ( hello_world_coroutine (2)) loop. run_forever ()

  11. Coroutines are computer-program components that generalize subroutines for non-preemptive multitasking, by allowing multiple entry points for suspending and resuming execution at certain locations Wikipedia

  12. How async and await ended up in python Order of execution - raise and return Iterable and Iterator Generator functions - yield and . send Python 3.3 yield from Definition for coroutine in Python Python 3.4, @asyncio.coroutine Python 3.5, @types.coroutine async and await

  13. Order of execution

  14. throw_exception.py def throw_exception (): print ('Will raise an Exception') raise Exception ('Raised inside `throw_exception`') print ('This message won\'t be printed')

  15. hello_world.py def hello_world (): print ('Hello world!') return 42 print ('This message will never be printed')

  16. yield

  17. Iterable __iter__ for x in iterable:

  18. Iterator __next__ __iter__

  19. iterator.py class MyIterator: def __init__ (self): self.counter = 1 def __iter__ (self): return self def __next__ (self): counter = self.counter if counter > 3: raise StopIteration self.counter += 1 return counter

  20. iterator = MyIterator() next(iterator) # returns 1 next(iterator) # returns 2 next(iterator) # returns 3 next(iterator) # raises StopIteration 


  21. iterator = MyIterator() for numb in iterator: print(numb) 1 2 3

  22. Generator function

  23. generator_function.py def generator_function (): print ('Going to yield first value') yield 1 print ('Yielding second value') yield 2

  24. gen = generator_function() next(gen) ‘Going to yield first value’ 1 next(gen) ‘Yielding second value’ 2 next(gen) # raises StopIteration 


  25. .send

  26. generator_send.py def generator_send (): print ('Going to yield a value') received = yield 42 print (f'Received {received}')

  27. gen = generator_function() gen.send(None) ‘Going to yield value’ 42 gen.send(‘Hello generator’) ‘Received Hello generator’ StopIteration is raised

  28. Python 3.3 yield from for x in iterator: yield x yield from iterator

  29. yield_from.py def first_generator (): yield 1 print ('In the middle of first generator') yield 2 def second_generator (): gen = first_generator () yield from gen print ('In the middle of second generator') yield 3

  30. gen = second_generator() next(gen) 1 next(gen) In the middle of first generator 2 next(gen) In the middle of second generator 3 next(gen) # raises StopIteration

  31. Coroutines are computer-program components that generalize subroutines for non-preemptive multitasking, by allowing multiple entry points for suspending and resuming execution at certain locations Wikipedia

  32. Python 3.3 definition of coroutine in Python

  33. Python 3.4 @asyncio.coroutine

  34. Python 3.6.3 import asyncio async def hello_world_coroutine (delay): print ('Hello') await asyncio. sleep (delay) print (f'World, with delay: {delay}') loop = asyncio. get_event_loop () loop. create_task ( hello_world_coroutine (1)) loop. create_task ( hello_world_coroutine (2)) loop. run_forever ()

  35. Python 3.4 import asyncio @asyncio.coroutine def hello_world_coroutine (delay): print ('Hello') yield from asyncio. sleep (delay) print (f'World, with delay: {delay}') loop = asyncio. get_event_loop () loop. create_task ( hello_world_coroutine (1)) loop. create_task ( hello_world_coroutine (2)) loop. run_forever ()

  36. Python 3.5 @types.coroutine

  37. Python 3.5 async async def

  38. Python 3.5 await

  39. __await__

  40. Conclusion

  41. What’ s next?

  42. The superpowers of async and await

  43. Thank you Here’ s a kiss for you! https:/ /github.com/pgergov/ europython-2018

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend