Hi Roberto, Thanks for the clarification.
Per your explanation of using joinall()...the request will wait and is enough to stop WSGI callable execution. Does that mean other requests will be process? That is, I am now in async mode and therefore non blocking with, in theory, a blocking redis client? If so....that is soooooooo cooooool! Thanks On Sat, Jun 16, 2012 at 2:38 PM, Roberto De Ioris <[email protected]> wrote: > >> Hi, >> >> I am tying to best take advantage the gevent loop in uWSGI to make >> async redis calls using redis-py. >> >> Per the uWSGI docs at http://projects.unbit.it/uwsgi/wiki/AsyncSupport >> >> """every time the uWSGI server calls yield it stops the execution of >> the app and accept a new request or resume a previously stopped >> request. """ >> >> So, redis-py is blocking. So, if I want to make a redis call ...lets >> say the call takes 15 ms, in the mean time, I can process more >> requests and when the resutks are ready then continue on my merry way? >> >> Where I am confused is to best use yield. >> >> Do a call gevent.joinall(jt) or yield gevent.joinall(jt) or none of >> the above. From the below, I want to make two pipeline requests and >> not have the main loop block. >> >> >> Below is my code using bottle: >> >> def execute_pipe(pipe): >> data = pipe.execute() >> return data >> >> @post('/') >> def my_post(): >> >> #Get post data here >> >> pipe_threads = [] >> p1 = r_main_writes.pipeline() >> p1.hgetall(mab_profile1) >> pipe_threads.append(p1) >> p2 = r_other_writes.pipeline() >> p2.hgetall(mab_profile2) >> pipe_threads.append(p2) >> >> jt = [] >> for pt in pipe_threads: >> jt.append(gevent.spawn(execute_pipe, pt)) >> gevent.joinall(jt) >> >> > > > If you call joinall() the request will wait 'til all of the pipe_threads > will end. This is enough to stop WSGI callable execution. The latest yield > will be required for sending a body to the client. > > If (instead) you want the pipe_threads to work in background and send > output to the client as soon as possibile, remove the joinall() call > In that way pipe_threads will continue running after the end of the request. > > > -- > Roberto De Ioris > http://unbit.it > _______________________________________________ > uWSGI mailing list > [email protected] > http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi _______________________________________________ uWSGI mailing list [email protected] http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi
