service-streamer icon indicating copy to clipboard operation
service-streamer copied to clipboard

某个worker死掉后,mp.Queue() get获取输入数据,锁无法释放bug

Open lxsyz opened this issue 2 years ago • 0 comments

你好,我启动2个worker测试服务效果,在我手动杀死第一个worker时(模拟服务意外崩了的情况),发现有时候第一个worker会占据读取输入队列数据的_rlock,手动杀死时,这个锁不会被释放,从而导致第二个worker总是不能从队列中get到值,recv_request永远超时,队列长度持续增大。请问有没有什么好的异常处理方案?

我使用的是Streamer和StreamerWorker

try:
    print("_recv_request pid is: " + str(os.getpid()))
    print("_request_queue is: " + str(self._request_queue.qsize()))
    item = self._request_queue.get(timeout=timeout)

except Empty:

    raise TimeoutError
else:
    return item
# queues.py中的代码
if not self._rlock.acquire(block, timeout):
    print("锁住了")
    raise Empty

lxsyz avatar Sep 05 '22 02:09 lxsyz