2012-05-12 4 views
1

Мой стек - uWSGI 1.2.2, bottle и gevent 1.0b2. Я пытаюсь сделать следующее async.uwsgi, gevent и async loops - UnboundLocalError: локальная переменная 'query_string', указанная перед назначением

1) служит пикселем изображение так быстро, как это возможно, и закрыть соединение 2), то я передать строку запроса к функции, чтобы я мог использовать GEvent данных асинхронной записи в REDIS 3) в соответствии с uwsgi дока в http://projects.unbit.it/uwsgi/wiki/Gevent Кажется, я делаю это правильно. 4) В журналах я получаю эту ошибку. Я сервер пиксели, но .....

Traceback (most recent call last): 
    File "/home/ubuntu/workspace/bottleServer.py", line 222, in upixel 
    gevent.spawn(pixelRedisWrite,cookie_id,query_string,yield_time) 
UnboundLocalError: local variable 'query_string' referenced before assignment 
[pid: 28173|app: 0|req: 91/91] 120.28.191.173() {40 vars in 1909 bytes} [Sat May 12 19:07:24 2012] GET /upixel?bid=eydhdmlkJzogJ2luZm9AYWRtYWdpYy5jby5qcCcsICdjcmlkJzogJzIwNzY3MDczNTE1JywgJ21hYm 

Итак ... почему это происходит? Строка запроса есть ....

Вот как я запускаю uwsgi

sudo /usr/local/bin/uwsgi --loop gevent --socket :3031 --wsgi-file /home/ubuntu/workspace/bottleServer.py --master --async 10 --listen 100 --processes 1 





def pixelRedisWrite(ckid,qs,yield_time): 
    pass 


@route('/upixel/') 
@route('/upixel') 
def upixel(): 
    sw = stopwatch.Timer() 

    if request.get_cookie('rtbhui'): 
     cookie_id = request.get_cookie('rtbhui') 
    else: 
     cookie_id=str(uuid4()) 
     response.set_cookie('rtbhui', cookie_id , max_age=31556952*2, domain='rtb.rtbhui.com') 

    cookie_id='test' 
    response.content_type = 'image/gif' 
    sw.stop() 
    yield_time = int(sw.elapsed * 1000) 
    if request.query.bid: 
     query_string = base64.b64decode(request.query.bid) 
     query_string = ast.literal_eval(query_string) 
     #pixelRedisWrite(cookie_id,query_string,yield_time) 
    yield pixel 
    #print 'gggggg',query_string 
    gevent.spawn(pixelRedisWrite,cookie_id,query_string,yield_time) 


if __name__ == "__main__": 
    # Interactive mode 
    run(host='localhost', port=8080) 
else: 
    # Mod WSGI launch 
    os.chdir(os.path.dirname(__file__)) 
    application = default_app() 

ответ

2

Это не имеет ничего общего с GEvent или uwsgi. Вы определяете query_string только в определенном случае (когда верно request.query.bid). Если это неверно, переменная не определена, и UnboundLocalError сообщает об этом.