kazoo在多进程下使用全局连接死锁问题

本文探讨了使用Kazoo作为分布式系统协调组件时,在多进程环境下共用全局连接导致的死锁问题。通过对比多线程场景下的正常行为,推测问题可能源于类Unix系统中线程fork子进程时引发的死锁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

kazoo在多进程下使用全局连接死锁问题


问题描述

在使用kazoo作为分布式系统的协调部件时,在多进程共用一个连接到zookeeper服务器的全局连接时,程序往往会阻塞在使用全局连接操作zookeeper目录时,但使用多线程却不会

import multiprocessing

from kazoo.client import KazooClient

zk = KazooClient(hosts="localhost:2181")
zk.start()

def getChildren():
    print 'start'
    print zk.get_children('/')

if __name__ == '__main__':
    process = multiprocessing.Process(target=getChildren)
    process.start()

上述程序在启动进程后,先是输出'start',然后就阻塞在zk.get_children('/')

import threading

from kazoo.client import KazooClient

zk = KazooClient(hosts="localhost:2181")
zk.start()

def getChildren():
    print 'start'
    print zk.get_children('/')

if __name__ == '__main__':
    thread = threading.Thread(target=getChildren)
    thread.start()

如果换成线程启动,则会正常输出相应结果后结束

原因猜测

具体原因未有定论,但是曾经看到过说

在类unix系统下,在线程中fork生成子进程会造成死锁

也许是造成该问题的原因

这只是我的猜测而已,希望了解的童鞋给予指导!拜谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值