调度方法以在特定时间运行

时间:2017-07-10 01:32:10

标签: python google-app-engine flask twilio

我在python中创建一个应用程序,通过Twilio发送文本。我正在使用烧瓶,它托管在Google App Engine上。我有一个消息列表,需要通过调用我的消息功能在特定的日期和时间发送。创建这个的简单方法是什么?我对这一切都比较新。

我尝试过apscheduler,但它只适用于我的本地而不是app引擎。我已经阅读过有关cron作业的内容,但是找不到有关特定日期/时间的内容或者在作业运行时如何通过args。

3 个答案:

答案 0 :(得分:1)

正如Fabio的评论中提到的,你可以让每10分钟(或每分钟)运行一次cron任务。我会查看要发送消息的文件夹。如果你要在该文件夹中创建一个文件名格式以日期和时间开头,你可以这样做:

文件夹内容:

201707092205_<#message_id>

用于发送消息的伪代码:

intant_when_the_script_is_ran = datetime.now().strftime(format_to_the_minute)

for file in folder:
    if intant_when_the_script_is_ran in file
       with open(file, 'rw') as fh:
         destination = fh.readline() #reading the fisrt line
         message = fh.readlines() #reading the rest of the message
         twilioapi.sendmessage(destination, message)
       os.remove(file)  #the remove could be done in another script to leave some traces 

答案 1 :(得分:1)

这是Google应用引擎派上用场的地方。您可以使用app引擎中的cron作业。在项目中创建一个cron.yaml文件。在此文件中,您可以在特定时间内每周一天到一天内制作所有类型的计划选项。以下是cron.yaml文件的示例

cron:
- description: "daily summary job"
  url: /tasks/summary
  schedule: every 24 hours
- description: "monday morning mailout"
  url: /mail/weekly
  schedule: every monday 09:00
  timezone: Australia/NSW
- description: "new daily summary job"
  url: /tasks/summary
  schedule: every 24 hours
  target: beta

使用简单的英文格式指定Cron计划。

every 12 hours
every 5 minutes from 10:00 to 14:00
every day 00:00
every monday 09:00
2nd,third mon,wed,thu of march 17:00
1st monday of sep,oct,nov 17:00
1 of jan,april,july,oct 00:00

有关详细说明的日程安排格式,请参阅this documentation

答案 2 :(得分:0)

另一种选择是使用taskqueue任务,您可以使用eta选项指定运行任务的时间(预计到达时间)。

任务将一直排在队列中,直到执行时间到来,然后GAE将启动任务以执行您需要的任何处理,例如发送短信。

任务可能无法在您指定的确切时间执行,但根据我的经验,它通常非常接近。当然比每10分钟运行一次CRON工作要准确得多。

这也比使用CRON作业更有效,因为CRON作业每隔10分钟就会向您的应用程序发出一次请求,但该任务只会在需要时执行。如果您的应用数量较少,这可能会帮助您保持在免费配额范围内。