Python 应用程序引擎上的RPC是否将本地化为单个实例?
我正在使用RPC异步获取多个URL。我使用一个全局变量来跟踪完成情况,并注意到在RPC调用完成之前和之后,该全局变量的内容有着根本不同的内容 感觉我错过了一些明显的东西。。。在进行回调时,rpc.wait()是否可能导致在新实例上加载应用程序上下文 这是基本模式Python 应用程序引擎上的RPC是否将本地化为单个实例?,python,google-app-engine,Python,Google App Engine,我正在使用RPC异步获取多个URL。我使用一个全局变量来跟踪完成情况,并注意到在RPC调用完成之前和之后,该全局变量的内容有着根本不同的内容 感觉我错过了一些明显的东西。。。在进行回调时,rpc.wait()是否可能导致在新实例上加载应用程序上下文 这是基本模式 aggregated_results = {} def aggregateData(sid): # local variable tracking results aggregated_results[sid] = [
aggregated_results = {}
def aggregateData(sid):
# local variable tracking results
aggregated_results[sid] = []
# create a bunch of asynchronous url fetches to get all of the route data
rpcs = []
for r in routes:
rpc = urlfetch.create_rpc()
rpc.callback = create_callback(rpc,sid)
urlfetch.make_fetch_call(rpc, url)
rpcs.append(rpc)
# all of the schedule URLs have been fetched. now wait for them to finish
for rpc in rpcs:
rpc.wait()
# look at results
try:
if len(aggregated_results[sid]) == 0:
logging.debug("We couldn't find results for transaction")
except KeyError as e:
logging.error('aggregation error: %s' % e.message)
logging.debug(aggregated_results)
return aggregated_results[sid]
def magic_callback(rpc, sid):
# do some work to parse the result
# of the urlfetch call...
# <hidden>
#
try:
if len(aggregated_results[sid]) == 0:
aggregated_results[sid] = [stop]
else:
done = False
for i, s in enumerate(aggregated_results[sid]):
if stop.time <= s.time:
aggregated_results[sid].insert(i,stop)
done = True
break
if not done:
aggregated_results[sid].append(stop)
except KeyError as e:
logging.error('aggregation error: %s' % e.message)
aggregated_results={}
def聚合数据(sid):
#局部变量跟踪结果
聚合结果[sid]=[]
#创建一组异步url回迁来获取所有路由数据
rpcs=[]
对于路线中的r:
rpc=urlfetch.create_rpc()
rpc.callback=创建_回调(rpc,sid)
urlfetch.make_fetch_调用(rpc,url)
rpcs.append(rpc)
#已获取所有计划URL。现在等待他们完成
对于rpc中的rpc:
rpc.wait()
#看看结果
尝试:
如果len(聚合结果[sid])==0:
debug(“我们找不到事务的结果”)
除KeyError外,如e:
logging.error('聚合错误:%s'%e.message)
logging.debug(聚合结果)
返回聚合结果[sid]
def magic_回调(rpc、sid):
#做一些工作来解析结果
#urlfetch调用的。。。
#
#
尝试:
如果len(聚合结果[sid])==0:
聚合结果[sid]=[stop]
其他:
完成=错误
对于枚举中的i,s(聚合的_结果[sid]):
如果stop.time,则整个代码集将仅在单个实例上运行。我假设您是从一个任务而不是一个面向前端的请求运行此操作?您似乎缺少代码,aggregated_results
aggregated_results的范围是什么?我假设aggregated_results应该是一个闭包,但我看不到它是如何定义的,也看不到它的范围。我已经更新了代码示例,使其更加准确。此代码在web请求处理程序上运行。