【发布时间】: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