【问题标题】:Python deploying infinite while loop to production and handling failuresPython将无限while循环部署到生产和处理故障
【发布时间】:2022-01-05 12:36:38
【问题描述】:

我有一个脚本等待任务队列中的任务然后运行它们。像这个最小的例子:

import redis
cache = redis.Redis(host='127.0.0.1', port=6379)
import time

def main():
    while True:
        message = cache.blpop('QUEUE', timeout=0)
        work(message)

def work(message):
    print(f"beginning work: {message}")
    time.sleep(10)


if __name__ == "__main__":
    main()

我没有使用 Web 服务器,因为脚本不需要回答 http 请求。但是,我对如何使该脚本能够抵抗生产中的错误感到有些困惑。 使用 Web 服务器和 gunicorn,gunicorn 将为每个请求处理一个进程。如果请求导致错误,则工作人员死亡并且请求失败但服务器继续运行。 如果我没有运行 http 服务器,如何实现这一点?我可以分叉一个进程来执行“工作”功能,但执行分叉的代码仍然是应用程序代码。是否可以使用 Gunicorn 部署像我这样的非 http 服务器脚本?还有什么我应该用来处理分叉过程的吗?还是在应用程序内部分叉并部署到生产环境是否合理?

【问题讨论】:

  • 您可以使用 systemd 或 supervisord 来启动您的程序并在出现故障时重新启动

标签: python deployment server gunicorn


【解决方案1】:

这个呢:

while True:
   try:
      message = cache.blpop('QUEUE', timeout=0)
      work(message)
   except: Exception as e :
      print(e)

【讨论】:

  • 是的 :) 它仍然将错误处理留给应用程序本身。但是那里几乎不会出错。我认为。这可能很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-12
  • 2020-11-30
  • 2015-05-22
  • 2016-12-27
  • 1970-01-01
  • 2015-05-28
  • 1970-01-01
相关资源
最近更新 更多