#python #google-app-engine #cron #arguments
#python #google-app-engine #cron #аргументы
Вопрос:
У меня есть приложение, написанное на Python. Он собирает и анализирует данные из определенных источников (RSS, Atom, Twitter и т.д.), И если найдены новые данные, они сохраняются в базе данных MySQL.
У меня есть много источников, определенных в самом приложении, и не все могут быть проверены одновременно из-за ограничений (например, Twitter и его 350 запросов в час), поэтому идея состоит в том, чтобы cronить их отдельно, передавая источники в качестве аргументов.
myscript.py —обновить —исходный ABC (извлекать, анализировать, проверять и сохранять данные из источника ABC)
myscript.py —обновить —исходный код XYZ (извлекать, анализировать, проверять и сохранять данные из источника XYZ)
На данный момент у меня все работает нормально в моем локальном cron, но я хотел бы запустить это в 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 Cron. Есть обходные пути?
Ответ №1:
Поместите исходную переменную в свой URL-путь:
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...
Комментарии:
1. Я решил проблему, получив исходный код из request.get , но это намного лучше, спасибо!
Ответ №2:
Начиная с cron.yaml может быть обновлен только путем загрузки новой версии вашего приложения и имеет верхний предел количества объектов, вам было бы лучше решить эту проблему, написав свое приложение для использования очереди задач для планирования операций.