Python's iterators and generators provide some very useful tools, especially if you are dealing with things like very large or infinite lists, or generating values on the fly. In part one, we'll go over the basics and look at Iterators, Generators, and the "yield" keyword, and provide examples of where you would use such things. We'll also touch on "yield from" and how that gives us a powerful refactoring tool.
Then for part 2, we'll build on that knowledge and get into a more advanced and cutting edge use of generators: the new asyncio (formerly Tulip) module and python coroutines. Using the "yield from" keyword, we can build safe multi-threaded python applications and really take advantage of our system and concurrent programming, while avoiding the messy syntax of complexity of something like Twisted, and also avoid monkey patching Python itself like gevent. Note that this part of the talk will feature code written in Python 3.4, as asyncio was only added recently. Don't worry though, you probably won't even notice the difference if you are comfortable with Python 2.7.