(Yes I am spending Christmas Eve on exactly this... :) So, I'm trying to set started porting an existing wsgi application I've written. The existing app uses Twisted and runs under CherryPy's wsgi server. I thought eventlet and spawning would be a nice replacement for twisted and cherrypy respectively.
But I'm having trouble. The example from the docs for downloading three pages works fine. But when I try and embed the example as a wigi app I can't make it work. I've tried a bunch of variations, but here's the current one. #!/usr/bin/env python urls = ["http://www.google.com", "http://wiki.secondlife.com", "http://us.i1.yimg.com"] import time from eventlet import coros, httpc, util from webob import Request, Response def fetch(url): print "%s fetching %s" % (time.asctime(), url) x = httpc.get(url) print x print "%s fetched %s" % (time.asctime(), url) def FetchApp(environ, start_response): util.wrap_socket_with_coroutine_socket() pool = coros.CoroutinePool(max_size=4) waiters = [] for url in urls: waiters.append(pool.execute(fetch, url)) for waiter in waiters: waiter.wait() resp = Response("done") return resp(environ, start_response) Now when I run this as: % spawn test_eventlet.FetchApp and then I make a request with my web browser, I get the folowing output: (18686) **** Controller starting up at Thu Dec 25 04:52:16 2008 (18686) spawning 1 children with /usr/lib/python2.5/site-packages/ Spawning-0.8.7-py2.5.eg g/spawning/spawning_child.pyc (18686) serving wsgi with configuration: (18686) {'app': 'test_eventlet.FetchApp', (18686) 'app_factory': 'spawning.wsgi_factory.app_factory', (18686) 'args': ['test_eventlet.FetchApp'], (18686) 'deadman_timeout': 120, (18686) 'dev': True, (18686) 'host': '', (18686) 'middleware': [], (18686) 'num_processes': 1, (18686) 'port': 8080, (18686) 'processpool_workers': 0, (18686) 'source_directories': ['/home/sam/eventlet-fetcher'], (18686) 'threadpool_workers': 10, (18686) 'watch': None} (18687) reloader watching sys.modules (18687) using 10 threads (18687) wsgi starting up on http://0.0.0.0:8080/ Thu Dec 25 04:52:20 2008 fetching http://www.google.com Thu Dec 25 04:52:20 2008 fetching http://wiki.secondlife.com Thu Dec 25 04:52:20 2008 fetching http://us.i1.yimg.com Traceback (most recent call last): File "/usr/lib/python2.5/site-packages/eventlet-0.8-py2.5.egg/eventlet/hubs/hub.py", li ne 294, in fire_timers timer() File "/usr/lib/python2.5/site-packages/eventlet-0.8-py2.5.egg/eventlet/timer.py", line 77, in __call__ cb(*args, **kw) File "/usr/lib/python2.5/site-packages/eventlet-0.8-py2.5.egg/eventlet/greenlib.py", line 314, in switch rval = other.switch(value, exc) error: cannot switch to a different thread Timer raised: Timer(0, <function switch at 0x8cad70>, *(<greenlet.greenlet object at 0xbcef90>, [(2, 1, 6, '', ('64.233.161.99', 80)), (2, 1, 6, '', ('64.233.161.104', 80)), (2,1, 6, '', ('64.233.161.147', 80))]), **{}) Traceback (most recent call last): File "/usr/lib/python2.5/site-packages/eventlet-0.8-py2.5.egg/eventlet/hubs/hub.py", line 294, in fire_timers timer() File "/usr/lib/python2.5/site-packages/eventlet-0.8-py2.5.egg/eventlet/timer.py", line77, in __call__ cb(*args, **kw) File "/usr/lib/python2.5/site-packages/eventlet-0.8-py2.5.egg/eventlet/greenlib.py", line 314, in switch rval = other.switch(value, exc) error: cannot switch to a different thread Timer raised: Timer(0, <function switch at 0x8cad70>, *(<greenlet.greenlet object at 0xc21090>, [(2, 1, 6, '', ('204.245.162.32', 80)), (2, 1, 6, '', ('204.245.162.27', 80))]), **{}) What at I doing wrong? Thanks
_______________________________________________ Policies and (un)subscribe information available here: http://wiki.secondlife.com/wiki/SLDev Please read the policies before posting to keep unmoderated posting privileges
