我有一个 python 脚本,它在等待 redis 列表上的数据时进行监听和阻塞。
使用以下命令在 upstart 中运行良好:
description "stage message consumer"
author "Nilesh Ashra"
start on started mountall
stop on shutdown
respawn
exec sudo -u user REDIS_HOST=0.0.0.0 ENVIRONMENT=my_env /usr/bin/python /path/to/message_consumer.py
我的问题是,我可以使用 upstart 来启动其中的 12 个吗?
如果没有的话,您能推荐一种方法来做到这一点吗?
答案1
我可能在这一点上有些偏离,因为我已经有一段时间没有研究过解释语言守护进程了,但我认为这样做的“正确”方法是设计你的程序来监听端口,然后分叉另一个进程来处理另一个端口上的一组请求/作业,同时父进程继续监听更多的连接。
您可能需要查找有关如何创建简单 Web 服务器的代码示例,以了解如何执行此类操作。Mailq 是正确的,您不能让多个进程同时监听相同的 IP 和端口对。
因此...分叉其他完成其工作的工作流程然后与控制流程同步。
答案2
不可以。您不能在同一端口上多次监听。因此,如果第一个实例已经占用了端口(假设为 80),则其他实例都不能在同一端口上监听。
但即使它不是 TCP/IP 监听守护进程,它仍然是一个奇怪的要求。为什么要多次并行启动一个执行相同操作的命令?