【发布时间】:2015-02-12 16:35:12
【问题描述】:
我写了一个 Python 程序来把东西发布到互联网上。有一个函数叫做 send(x),其中 x 是我的帖子列表的第 x 条记录。我想调用 send(0)、send( 1),...., 大约 5 分钟/post.How 可以通过使用 cron 配置来实现这个任务?还是任务队列?
【问题讨论】:
标签: python google-app-engine cron
我写了一个 Python 程序来把东西发布到互联网上。有一个函数叫做 send(x),其中 x 是我的帖子列表的第 x 条记录。我想调用 send(0)、send( 1),...., 大约 5 分钟/post.How 可以通过使用 cron 配置来实现这个任务?还是任务队列?
【问题讨论】:
标签: python google-app-engine cron
我想我可以考虑在这里使用deferred.defer。
def send_wrapper(value):
send(value)
deferred.defer(send_wrapper, value + 1, _countdown=5*60)
现在你只需要设法调用这个方法一次(例如从一个处理程序),它会每 5 分钟调用一次 send 并增加一个值。在这一切之下,它使用了 TaskQueue API 和 pickling 来为延迟任务提供一个非常简单的接口。整洁。
当然,永远调用它似乎有点奇怪,但添加逻辑来终止延迟调用序列不会太难。
您的另一个选择是将值保留在数据存储中并使用 cron...这需要更多的工作(并且需要 db.Model 或 ndb.Model 这实际上只用于单个实体),但在归根结底,实施起来可能仍然没有那么难。
【讨论】:
两者都需要。首先你可以在你的 cron.yaml 文件中添加这样的东西:
然后在你的 router.py 中你需要类似的东西
webapp2.Route('/tasks/send-updates', 'handlers.tasks.task_manager.SendUpdates'),
最后,您必须在 handlers/tasks/task_manager.py 中实现您的新处理程序 (SendUpdates)。
我建议研究 [1] 中给出的文档。
[1]https://cloud.google.com/appengine/docs/python/config/cron
【讨论】: