【问题标题】:How to run a python app repeatedly using Bluemix?如何使用 Bluemix 重复运行 python 应用程序?
【发布时间】:2016-08-21 09:45:22
【问题描述】:

Bluemix python 构建包工作得很好——cf push myapp --no-route 非常容易。到目前为止,一切顺利。

不过是一个问题:

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

背景

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

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

【问题讨论】:

标签: python ibm-cloud openwhisk


【解决方案1】:

有几个选项:

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 容器中,并根据计划或由外部事件驱动来调用它。

【讨论】:

  • 有用的建议,谢谢@data_henrik。我赞成继续采用 OpenWhisk 方法。我现在正在探索这个,并希望在我成功后提供详细的答案。我已经在 Bluemix 中运行了我的 python 应用程序容器化;我已经配置了一个骨架 Openwhisk 触发器;行动;和规则,但似乎 OpenWhisk 只处理 Docker Hub 容器而不是 Bliuemix 容器......但这是我需要在其他地方回答的另一个问题。
  • 我已经通过详细的命令、叙述和程序here on GitHub 回答了关于如何将我现有的 Python 改编为 OpenWhisk Docker 操作here 的部分问题。接下来,我将在此页面上针对我的问题提供答案,详细说明答案的 OpenWhisk 触发器和规则部分。
【解决方案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 频道的人们非常乐于助人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 2018-09-04
    • 1970-01-01
    • 2019-12-19
    相关资源
    最近更新 更多