关闭Google App Engine后台主题的正确方法是什么?我已经尝试将循环变量设置为false并尝试连接()线程,但无论我尝试什么,我都会多次调用_ / ah / stop最后以“进程终止,因为后端花了很长时间才能关闭”。
它有效,但感觉不是很稳定,是否有更好的方法可以关闭它们?
一些代码:
_thread = None`
_should_run = True
def work():
service = BqClient.getService()
tabledata = service.tabledata()
while (_should_run and not runtime.is_shutting_down()):
try:
queue = taskqueue.Queue('stream-queue')
tasks = queue.lease_tasks(300, 1000)
...do stuff and then sleep...
def startStreamThread():
_thread = BackgroundThread(target = work)
_thread.start()
def stopStreamThread():
_should_run = False
if (_thread and _thread.isAlive()):
_thread.join(20)
答案 0 :(得分:0)
在您的代码中,您的线程负责自己的关闭。这是一件好事,因为BackgroundThread可以比生成他的请求更长。
如果可能,App Engine会通知后端 30秒 终止它。
如果循环中的一批工作时间超过30秒,则线程将无法正常结束。也许您可以尝试减少每个循环中完成的工作量,并在runtime.is_shutting_down
之前测试time.sleep
。
while True:
# Do stuff that need less than 30 sec.
do_stuff()
# Check for shutdown or sleep.
if runtime.is_shutting_down():
break
else:
time.sleep(1)
有时如果可能(想想硬件故障)是不可能的,你的后端会在很短的时间内关闭。
你永远不能避免突然关机。确保它不会破坏您的应用程序逻辑。