Mil*_*cic 8 python locking celery kazoo apache-zookeeper
我正在使用芹菜和动物园管理员(kazoo锁)来锁定我的工人.当我在释放锁之前杀死(-9)其中一个工人然后锁永远锁定时,我遇到了问题.
所以我的问题是:杀死进程释放锁定在该进程中还是在zookeeper中有一些错误?
Zookeeper 锁使用临时节点.短暂节点是一个节点,只要创建它的会话处于活动状态,该节点就会存在.创建会话的过程会定期向zookeeper发送心跳消息,从而使会话保持活动状态.
因此,如果您终止了创建锁定的进程,则最终会释放锁定,因为会话将因zookeeper不再接收心跳而死亡.
因此,在释放锁之前杀死一名工人最终应该释放锁.
如果永远不会发布锁定,可能会发生一些事情,
这不是一个动物园管理员的错误.
你怎么知道锁没有被释放?
使用终止信号终止进程对于清除“软件锁”(例如 ZooKeeper 锁)没有任何作用。
由 KILL 信号杀死的唯一一种锁是操作系统级锁,因为所有文件描述符都被杀死,因此文件描述符锁也被杀死。但就 ZooKeeper 而言,这些不是操作系统级别的锁(是否只是因为 ZooKeeper 进程,即使在同一台机器上,也不是你的 python 进程)。
因此,这不是 ZooKeeper 中的错误,也不是 Kill -9 的预期行为。