0

1 つの場所のオートコンプリート API 用のプロキシ/キャッシュ サーバーを構築しようとしています。サーバーにクエリを実行しようとすると、ほぼ常にエラーが発生する単純化されたコードを次に示します。

#!/usr/bin/python
import gevent
from gevent import monkey
from gevent.wsgi import WSGIServer
monkey.patch_all()

import urllib2
import urlparse
import json

def requestHandler(env, start_response):
    start_response('200 OK', [('Content-Type', 'text')])
    parameters = urlparse.parse_qs(env['QUERY_STRING'])

    if 'search' in parameters:
        searchString = parameters['search'][0]

        # Query the auto-completion server
        json_results = urllib2.urlopen('http://autocomplete.wunderground.com/aq?query=' + searchString).read()
        results = json.loads(unicode(json_results, "ISO-8859-1"))

        finalResult = ''
        for result in results['RESULTS']:
                finalResult += result['name'] + ';' + result['c'] + ';' + result['zmw'] + ';' + result['tzs'] + ';'

        return [finalResult.encode('utf-16')]

    else:
        return ['ERROR']

server = WSGIServer(('', 8888), requestHandler)
print 'Server running on port 8888...'
server.serve_forever()

最初のクエリでは機能することもありますが、2 回目にリクエストするとクラッシュします。初めてすぐにクラッシュすることもあります。これは私が得るエラーです:

Modules/gcmodule.c:348: visit_decref: Assertion "gc->gc.gc_refs != 0" failed.
refcount was too small
object  : <weakref at 0x9e0f194; to 'gevent.core.http_request' at 0x9e0a11c>
type    : weakref
refcount: 1
address : 0x9e0f194
Aborted (core dumped)

私のシステムは次のとおりです: CentOS 6.3、Python 2.6.6、Gevent 0.13.8

誰かが何が間違っているのか手がかりを持っていますか? この種の問題を引き起こしているのはかなり基本的なもののようです...

4

1 に答える 1

1

ガベージ コレクションに関連するバグが修正されているため、おそらく Gevent を 1.0 バージョンにアップグレードする必要があります。

リクエストを受け入れる前に少し寝るという提案も見ました。

于 2013-02-25T12:44:49.277 に答える