私の問題は、appengine で必要な非同期 URL フェッチの応答でメモリを最適に解放する方法です。これが私が基本的にpythonで行うことです:
rpcs = []
for event in event_list:
url = 'http://someurl.com'
rpc = urlfetch.create_rpc()
rpc.callback = create_callback(rpc)
urlfetch.make_fetch_call(rpc, url)
rpcs.append(rpc)
for rpc in rpcs:
rpc.wait()
私のテストシナリオでは、1500 リクエストに対してそれを行います。しかし、短時間でさらに多くを処理できるアーキテクチャが必要です。
次に、タスクをキューに追加して結果を処理するコールバック関数があります。
def event_callback(rpc):
result = rpc.get_result()
data = json.loads(result.content)
taskqueue.add(queue_name='name', url='url', params={'data': data})
私の問題は、非常に多くの同時 RPC 呼び出しを行っているため、インスタンスのメモリがクラッシュすることです。
私はすでに3つのことを試しました:
del result
del data
と
result = None
data = None
コールバック関数の後にガベージ コレクターを手動で実行しました。
gc.collect()
しかし、コールバック関数がタスクをキューに追加した直後にメモリを解放するものは何もないように見えるため、インスタンスがクラッシュします。それを行う他の方法はありますか?