如何向Google App Engine上的Python定时任务传递参数?

4 投票
2 回答
1383 浏览
提问于 2025-04-17 05:40

我有一个用Python写的应用程序。它会从一些特定的来源(比如RSS、Atom、Twitter等)收集和解析数据,如果发现了新数据,就会把它保存到MySQL数据库里。

我在应用程序里定义了很多数据来源,但由于一些限制(比如Twitter每小时只能查询350次),并不是所有来源都能同时检查。所以我的想法是通过传递来源作为参数,分别设置定时任务来处理它们。

myscript.py --update --source ABC (从ABC来源获取、解析、检查并保存数据)
myscript.py --update --source XYZ (从XYZ来源获取、解析、检查并保存数据)

到目前为止,我在本地的定时任务上已经把这个搞定了,但我想在Google App Engine上运行这个,想要的效果是这样的:

cron.yaml:

cron:
- description: update source ABC
  url: /myscript.py --source ABC
  schedule: every 5 minutes
  login: admin
- description: update source XYZ
  url: /myscript.py --source XYZ
  schedule: every 12 minutes
  login: admin

我在App Engine的定时任务文档里没有找到任何方法来实现这个。有其他解决办法吗?

2 个回答

0

因为cron.yaml只能通过上传新版本的应用来更新,而且它对可以使用的实体数量有上限,所以你最好通过让你的应用使用任务队列来安排操作,这样会更有效。

3

把源变量放到你的网址路径里:

cron:
- description: update source ABC
  url: /cron/ABC/
  schedule: every 5 minutes
  login: admin
- description: update source XYZ
  url: /cron/XYZ/
  schedule: every 12 minutes
  login: admin

webapp.WSGIApplication([('/cron/([^/]+)/', CronHandler)])    

class CronHandler(webapp.RequestHandler):
    def post(self, source): 
            #do something with source variable...

撰写回答