如何避免PJSUA2死锁?

2024-04-25 13:01:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Python中创建一个基于pjsua2api的控制台软客户端。你知道吗

我在接听来电时遇到了死锁问题。你知道吗

def onIncomingCall(self, prm):
    c = Call(self, call_id=prm.callId)
    call_prm = pj.CallOpParam()
    call_prm.statusCode = 180
    c.answer(call_prm)

在这种情况下,c.answer(call\ prm)永远不会发回消息。你知道吗

def onIncomingCall(self, prm):
    c = Call(self, call_id=prm.callId)
    call_prm = pj.CallOpParam()
    call_prm.statusCode = 180
    c.answer(call_prm)
    raise Exception('test')

如果代码扩展了一个额外的Exception,那么c.answer将发回消息。你知道吗

根据this指南,问题是关于死锁的。锁位于主线程,这就是为什么后台工作者不能完成应答函数调用的原因。你知道吗

如何将锁释放回后台工作线程,并在应答调用后释放?你知道吗

正在使用以下设置启动终结点:

ep_cfg.uaConfig.threadCnt = 1
ep_cfg.uaConfig.mainThreadOnly = False

Tags: answerselfid消息defexceptioncall后台