我想在Python中基于PJSUA2 API创建基于控制台的软客户端。
我尝试接听来电时遇到死锁问题。
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)永远不会发送回180尝试消息。
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
会发送回180 Trying消息。
根据this指南,问题在于死锁。锁位于主线程上,这就是为什么后台工作者无法完成应答函数调用的原因。
如何在接听电话后将锁释放回后台工作线程?
通过以下设置启动端点:
ep_cfg.uaConfig.threadCnt = 1
ep_cfg.uaConfig.mainThreadOnly = False