如何使用Bluemix重复运行python应用程序?

时间:2016-08-21 09:45:22

标签: python ibm-cloud openwhisk

Bluemix python构建包工作正常 - 非常容易cf push myapp --no-route。到目前为止,非常好。

但问题是:

我想在Bluemix上定期运行它,就像我在本地系统上使用cron一样。

背景

该应用程序不是一个长期运行的任务。我只是定期运行它来收集我为客户编写的几个网站的数据,并在适当时通过电子邮件发送结果。

当我在IBM Bluemix上运行它时,Bluemix运行时当前认为该应用程序在退出时失败并​​需要立即重新启动。当然,这不是我想要的。

2 个答案:

答案 0 :(得分:3)

有几种选择:

1)如果你想在Python中完全做到这一点,你可以尝试像我在this example中所做的那样。基本结构是这样的:

import schedule  
 import time 

 def job():  
 #put the task to execute here  

 def anotherJob():  
 #another task can be defined here  

 schedule.every(10).minutes.do(job)  
 schedule.every().day.at("10:30").do(anotherJob)  

while True:  
   schedule.run_pending()  
   time.sleep(1)  

2)Bluemix已经改变,今天更好的方法是使用OpenWhisk。它是IBM的“无服务器”计算版本,它允许安排任务执行或事件驱动。您可以将应用程序移动到Docker容器中,并根据计划调用它或由外部事件驱动。

答案 1 :(得分:2)

在了解了 Openwhisk 的简单触发器之后,这变得非常容易。的作用; 规则模型。

所以我将我的Python应用程序完全迁移到 Openwhisk ,而不是使用Bluemix Python buildpack或Bluemix Docker容器,这些容器都不适合这项任务的简单需求。

我在下面提供了摘要。我写了一个更详细的版本here

作为额外的奖励,我能够删除大量自己的代码,而是使用Slack进行通知。由于这么简单,我将其包含在这个答案中。

程序

Openwhisk Python动作是python 2.7 档案sitemonitor.py

def main(inDict):
  inTimeout = inDict.get('timeout', '4')
  // A few function calls omitted for brevity
  if state.errorCount == 0:
    return {'text': "All sites OK"}
  else:
    return { 'text' : state.slackMessage }

main获取字典并返回字典

设置工作

创建sitemonitor操作

timeout是仅针对我的应用的参数。

$ wsk action create sitemonitor sitemonitor.py # default timeout of 4 seconds

或在默认参数

中为操作提供不同的超时
$ wsk action update sitemonitor sitemonitor.py --param timeout 2 # seconds

创建Slack包动作monitorSlack

wsk package bind  /whisk.system/slack monitorSlack \
  --param url 'https://hooks.slack.com/services/...' \
  --param username 'monitor-bot' \
  --param channel '#general'

找到Incoming Webhook URL from your Slack Team account

创建撰写的monitor2slack操作

$ wsk action create monitor2slack --sequence sitemonitor,monitorSlack/post

创建触发器

它会每隔一小时自动触发

$ wsk trigger create monitor2hrs \
    --feed /whisk.system/alarms/alarm \
    --param cron '0 0 */2 * * *' 

$ wsk trigger fire monitor2hrs # fire manually to test

创建规则

$ wsk rule create monitorsites monitor2hrs monitor2slack

...和 Openwhisk 将完成剩下的工作。

参考

Openwhisk documentation:非常好

Slack dW OpenTeam#openwhisk频道的人们非常乐于助人。