Как передать аргументы задаче python cron в Google App Engine?

#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 может быть обновлен только путем загрузки новой версии вашего приложения и имеет верхний предел количества объектов, вам было бы лучше решить эту проблему, написав свое приложение для использования очереди задач для планирования операций.