阻止消费者与生产商接触的秘诀通常是发出有害信息。

有些通过多个队列来完成,有些通过一个被理解为停止消费的专用消息来完成(后者只适用于一个工人)。

基本上,当python脚本看到有害消息时,它会立即关闭。您可能希望在单独的队列中使用此消息的原因是,如果您有多个worker,则可能需要广播消息,因此每个worker都需要一个独占队列。

至于启动脚本,最好是让工作人员继续运行,让他们等待重新启动消息。

否则,您可以创建一个observer worker或controller来接收消息和控制进程,比如重新启动python脚本,但这相当复杂。

我相信,如果你正在寻找一些预先加工好的东西,芹菜会起到很大的作用。

编辑-毒药信息在AMQP中可能已经有了其他含义。我的意思是你自己的毒药信息。

既然你想在它运行的时候杀死它,你就得用广播的方式去做。

对于每个使用者,每个python脚本实际上都有两个使用者。

一个用于接收实际数据,另一个用于接收启动和停止数据消费程序的命令。

如果您想开始,您可以有一个广播消息(JSON,但是您可以使用您喜欢的任何格式,或者也可以使用AMQP头属性)):{

"command" : "start"
}
当您想停止时,您的制作人可能会发送一条消息,如:
^{pr2}$

消费者回调将查看message.command == 'stop'。

一旦您看到在消费者身上调用channel.basicCancel(consumerTag)的消息,该消息实际上正在接收数据,并实际杀死当前正在运行的任何内容。杀死当前正在运行的任何东西都高度依赖于您的设置,所以我不能真正深入到这一点,因为它可能是一个单独的进程,也可能是一个单独的线程或事件,如果使用某个事件引擎的话。杀死长时间运行的进程本身就很棘手。在

如果使用主题交换,或者可以使用fanout(又名广播)交换,则每个python脚本都应该为命令使用者提供一个独占队列。

数据使用者将与所有其他脚本共享一个队列。