diff options
| author | Ryan Williams <rdw@lindenlab.com> | 2010-02-19 17:42:33 -0500 |
|---|---|---|
| committer | Ryan Williams <rdw@lindenlab.com> | 2010-02-19 17:42:33 -0500 |
| commit | 379ceb4741180fa19587651b5e9fb61d758ce6c4 (patch) | |
| tree | 1ad673edb0ef5a6201df897a6bce582b5718d3da /examples | |
| parent | fe30947508044d3273665c56af733256e2820e4d (diff) | |
| download | eventlet-379ceb4741180fa19587651b5e9fb61d758ce6c4.tar.gz | |
Added dispatch pattern that shows how to use GreenPiles. Feedparser examples in the examples dir.
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/feedscraper-testclient.py | 25 | ||||
| -rw-r--r-- | examples/feedscraper.py | 41 |
2 files changed, 66 insertions, 0 deletions
diff --git a/examples/feedscraper-testclient.py b/examples/feedscraper-testclient.py new file mode 100644 index 0000000..570ae47 --- /dev/null +++ b/examples/feedscraper-testclient.py @@ -0,0 +1,25 @@ +from eventlet.green import urllib2 + +big_list_of_feeds = """ +http://blog.eventlet.net/feed/ +http://rss.slashdot.org/Slashdot/slashdot +http://feeds.boingboing.net/boingboing/iBag +http://feeds.feedburner.com/RockPaperShotgun +http://feeds.penny-arcade.com/pa-mainsite +http://achewood.com/rss.php +http://raysmuckles.blogspot.com/atom.xml +http://rbeef.blogspot.com/atom.xml +http://journeyintoreason.blogspot.com/atom.xml +http://orezscu.blogspot.com/atom.xml +http://feeds2.feedburner.com/AskMetafilter +http://feeds2.feedburner.com/Metafilter +http://stackoverflow.com/feeds +http://feeds.feedburner.com/codinghorror +http://www.tbray.org/ongoing/ongoing.atom +http://www.zeldman.com/feed/ +http://ln.hixie.ch/rss/html +""" + +url = 'http://localhost:9010/' +result = urllib2.urlopen(url, big_list_of_feeds) +print result.read()
\ No newline at end of file diff --git a/examples/feedscraper.py b/examples/feedscraper.py new file mode 100644 index 0000000..1c7f290 --- /dev/null +++ b/examples/feedscraper.py @@ -0,0 +1,41 @@ +"""A simple web server that accepts POSTS containing a list of feed urls, +and returns the titles of those feeds. +""" +import eventlet +from eventlet import patcher +feedparser = patcher.import_patched('feedparser') + +# the pool provides a safety limit on our concurrency +pool = eventlet.GreenPool() + +def fetch_title(url): + d = feedparser.parse(url) + return d.feed.get('title', '') + +def app(environ, start_response): + if environ['REQUEST_METHOD'] != 'POST': + start_response('403 Forbidden', []) + return [] + + # the pile collects the result of a concurrent operation -- in this case, + # the collection of feed titles + pile = eventlet.GreenPile(pool) + for line in environ['wsgi.input'].readlines(): + url = line.strip() + if url: + pile.spawn(fetch_title, url) + # since the pile is an iterator over the results, + # you can use it in all sorts of great Pythonic ways + titles = '\n'.join(pile) + start_response('200 OK', [('Content-type', 'text/plain')]) + return [titles] + + +if __name__ == '__main__': + from eventlet import wsgi + from eventlet.green import socket + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, 1) + sock.bind(('localhost', 9010)) + sock.listen(50) + wsgi.server(sock, app)
\ No newline at end of file |
