gpt4 book ai didi

python - 使用 dev_appserver.py 在 Google 应用引擎上本地测试任务队列

转载 作者:行者123 更新时间:2023-12-01 03:38:03 24 4
gpt4 key购买 nike

我的应用程序引擎应用程序有 2 个队列。第一个队列中的工作线程启动第二个队列中的多个工作线程,并等待它们完成并合并。

当我部署它时,它工作正常,但它不起作用在本地测试时永远不会在第二个队列中生成任务。它在等待更新时卡住了(参见下面的代码)。原因似乎是 dev_appserver 是单线程的,并且不在后台启动服务。

这确实减慢了我的开发速度,因为我必须部署到云来测试任何内容。

有什么办法可以解决这个问题吗?

编辑:添加下面的(某种)伪代码。同样,这在云中工作得非常好,因为我有 10 分钟的时间限制来完成任务,并且每个 BigTask 完成时间不超过 30-40 秒。

队列 1 工作人员

class BigTask(webapp2.RequestHandler):
def do_stuff(self):
#do something here
small_task1 = taskqueue.add(...)
small_task2 = taskqueue.add(...)
small_task3 = taskqueue.add(...)
small_task4 = taskqueue.add(...)
# Create ndb entries for all small tasks

while True:
time.sleep(2)
# Check if ndb entry updated for all small_tasks
if status == 'Completed': #for all
break

add_results(...) # of all tasks here

# Update ndb entry for big_task
# done

队列 2 工作人员

class SmallTask(webapp2.RequestHandler): 
def do_stuff(self):
# Do processing
# Update ndb entry
# done

最佳答案

通常,在 GAE 应用代码中休眠并不是一个好主意 - 浪费实例正常运行时间、增加请求延迟、超过请求截止日期的风险等。

您可以通过将延迟的 BigTask 排队(使用 countdown 选项)来实现相同的功能,该任务将检查所有较小任务的状态,执行 add_results(...) code> stuff 如果他们完成了,或者如果没有,则重新排队(再次延迟)以便稍后重新检查。

作为副作用,您甚至可以对两种类型的任务使用相同的任务队列(当然,如果这符合您的应用要求)。

关于python - 使用 dev_appserver.py 在 Google 应用引擎上本地测试任务队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40098999/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com