Pjsip:用户注册多线程实例

该博客展示了如何使用Python的pjsua库在多线程环境中进行SIP用户注册。通过创建线程并使用互斥锁来确保线程安全,实现了对多个账号的并发注册尝试。每个线程负责一个用户的注册过程,并通过回调函数获取注册状态。
部署运行你感兴趣的模型镜像
# -*- coding: cp936 -*-
import pjsua as pj
import threading,time
import sys


def log_cb(level, str, len):
    print str,


class TestAccountCallback(pj.AccountCallback):
    iRegStatus = 0


    def __init__(self, account=None):
        pj.AccountCallback.__init__(self, account)
        self.iRegStatus = 0
        
    def on_reg_state(self):
        self.iRegStatus = self.account.info().reg_status
        


class SipRegister(threading.Thread):
    def __init__(self,lib,Domain,UserName,UserPsw):
        threading.Thread.__init__(self)
        self.lib = lib
        self.Domain = Domain
        self.UserName = UserName
        self.UserPsw = UserPsw
        self.Acc = None
        self.Acc_cb = None
        
    def run(self):
        self.lib.thread_register("Test")
        iTickCount = 0
        iCode = 0
        self.Register()
        iCode = self.Acc_cb.iRegStatus
        while iCode < 200 and iTickCount < 320:
            time.sleep(0.1)
            iCode = self.Acc_cb.iRegStatus
            iTickCount += 1
        
        if iCode == 200:
            print "Register Ok"
        else:
            print "Register Fail"
    def Register(self):
        global mutex
        try:
            mutex.acquire()
            self.Acc = self.lib.create_account(pj.AccountConfig(self.Domain,self.UserName,self.UserPsw))
            self.Acc_cb = TestAccountCallback(self.Acc)
            self.Acc.set_callback(self.Acc_cb)
            mutex.release()
        except pj.Error, e:
            print "Exception: " + str(e)
            return None
            
if __name__ == "__main__":
    mutex = threading.Lock()


    print "\n*****************************************************************"
    print "*                                                               *"
    print "*                    Created by Jason 2013.05                   *"
    print "*                                                               *"
    print "*****************************************************************\n"


    lib = pj.Lib()
    lib.init(log_cfg = pj.LogConfig(level=0, callback=log_cb, console_level=0))  
    lib.start()   
    transport = lib.create_transport(pj.TransportType.UDP, pj.TransportConfig(5060))
    for i in range(3):
        SipRegister(lib,"192.168.28.108",str(3601+i),"123456").start()
        time.sleep(1)
        
    print "Press any key to exit!"
    sys.stdin.readline().rstrip("\r\n")
    transport = None
    lib.destroy()
    lib = None
    print "\n***************************Exit**************************"

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值