我在python中创建一个应用程序,通过Twilio发送文本。我正在使用烧瓶,它托管在Google App Engine上。我有一个消息列表,需要通过调用我的消息功能在特定的日期和时间发送。创建这个的简单方法是什么?我对这一切都比较新。
我尝试过apscheduler,但它只适用于我的本地而不是app引擎。我已经阅读过有关cron作业的内容,但是找不到有关特定日期/时间的内容或者在作业运行时如何通过args。
答案 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分钟就会向您的应用程序发出一次请求,但该任务只会在需要时执行。如果您的应用数量较少,这可能会帮助您保持在免费配额范围内。