1

私のスタックは、uWSGI 1.2.2、bottle、およびgevent1.0b2です。私は次の非同期を実行しようとしています。

1)ピクセル画像をできるだけ速く提供し、接続を閉じます2)次に、クエリ文字列を関数に渡して、geventを使用してredisへの書き込みデータを非同期にできるようにします3)http://projects.unbitのuwsgiドキュメントによる.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()
4

1 に答える 1

2

これは gevent や uwsgi とは関係ありません。query_string特定の場合(request.query.bid真の場合)にのみ定義しています。そうでない場合、変数は未定義であり、それUnboundLocalErrorを示します。

于 2012-05-12T22:12:29.470 に答える