我的问题是如何最好地释放内存来响应 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 调用,以至于我的实例的内存崩溃:“在服务 975 个请求后,超过了 159.234 MB 的软私有内存限制”
我已经尝试了三件事:
del result
del data
和
result = None
data = None
我在回调函数之后手动运行了垃圾收集器。
gc.collect()
但是在回调函数将任务添加到队列后似乎没有直接释放内存 - 因此实例崩溃。还有其他方法吗?