Hey Sam, we actually created a separate mailing list for eventlet-related stuff, because sldev is pretty much for viewer development only. It's [email protected] . Cross-posting there for ya.

I'm not really an expert on spawning, but it looks like you might have more success not calling wrap_socket_with_coroutine_socket from within FetchApp. Spawning should handle that for you, modulo the command-line arguments given it. That's just a shot in the dark though.

And, merry christmas!

Sam's Lists wrote:
(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 <http://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

_______________________________________________
Policies and (un)subscribe information available here:
http://wiki.secondlife.com/wiki/SLDev
Please read the policies before posting to keep unmoderated posting privileges

Reply via email to