Reading http://www.dabeaz.com/coroutines/ and thought this was a natural for a twitter client. Here is a pretty simple version that just prints the public timeline every 60 seconds. Next, up removing the time.sleep and scheduling the followStatus function as a task so I can follow more than one stream at a time.
#!/usr/bin/env python # encoding: utf-8 import time import twitter def coroutine(func): """ A decorator function that takes care of starting a coroutine automatically on call. see: http://www.dabeaz.com/coroutines/ """ def start(*args,**kwargs): cr = func(*args,**kwargs) cr.next() return cr return start @coroutine def statusPrinter(): """ Just prints twitter status messages to the screen """ while True: status = (yield) print status.id, status.user.name, status.text def followStatus(twitterGetter, target, timeout = 60): """ Follows a twitter status message that takes a since_id """ since_id = None while True: statuses = twitterGetter(since_id=since_id) if statuses: # pretty sure these are always in order since_id = statuses[0] for status in statuses: target.send(status) # twitter caches for 60 seconds anyway time.sleep(timeout) def main(): api = twitter.Api() followStatus(api.GetPublicTimeline, statusPrinter()) if __name__ == '__main__': main()