From 501151b018486c4f0659b323ac26d8874746cb65 Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Wed, 19 Mar 2014 21:20:17 +0000 Subject: Misc (re #1751): added experimental option to enable/use worker thread for Python. To enable worker thread: - uncomment USE_THREADS in pjsip-apps/src/swig/python/Makefile - change USE_THREADS to True in pjsip-apps/src/pygui/application.py git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4798 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip-apps/src/pygui/application.py | 26 ++++++++++++++++++++++---- pjsip-apps/src/swig/python/Makefile | 5 +++-- 2 files changed, 25 insertions(+), 6 deletions(-) (limited to 'pjsip-apps') diff --git a/pjsip-apps/src/pygui/application.py b/pjsip-apps/src/pygui/application.py index 0dd5fa50..b171f386 100644 --- a/pjsip-apps/src/pygui/application.py +++ b/pjsip-apps/src/pygui/application.py @@ -39,12 +39,18 @@ import settings import os import traceback +# You may try to enable pjsua worker thread by setting USE_THREADS below to True *and* +# recreate the swig module with adding -threads option to swig (uncomment USE_THREADS +# in swig/python/Makefile). In my experiment this would crash Python as reported in: +# http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/2014-March/017223.html +USE_THREADS = False class Application(ttk.Frame): """ The Application main frame. """ def __init__(self): + global USE_THREADS ttk.Frame.__init__(self, name='application', width=300, height=500) self.pack(expand='yes', fill='both') self.master.title('pjsua2 Demo') @@ -73,8 +79,12 @@ class Application(ttk.Frame): # Default config self.appConfig = settings.AppConfig() - self.appConfig.epConfig.uaConfig.threadCnt = 0; - self.appConfig.epConfig.uaConfig.mainThreadOnly = True + if USE_THREADS: + self.appConfig.epConfig.uaConfig.threadCnt = 1 + self.appConfig.epConfig.uaConfig.mainThreadOnly = False + else: + self.appConfig.epConfig.uaConfig.threadCnt = 0 + self.appConfig.epConfig.uaConfig.mainThreadOnly = True self.appConfig.epConfig.logConfig.writer = self.logger self.appConfig.epConfig.logConfig.filename = "pygui.log" self.appConfig.epConfig.logConfig.fileFlags = pj.PJ_O_APPEND @@ -101,11 +111,18 @@ class Application(ttk.Frame): self.appConfig.saveFile(filename) def start(self, cfg_file='pygui.js'): + global USE_THREADS # Load config if cfg_file and os.path.exists(cfg_file): self.appConfig.loadFile(cfg_file) - self.appConfig.epConfig.uaConfig.threadCnt = 0; + if USE_THREADS: + self.appConfig.epConfig.uaConfig.threadCnt = 1 + self.appConfig.epConfig.uaConfig.mainThreadOnly = False + else: + self.appConfig.epConfig.uaConfig.threadCnt = 0 + self.appConfig.epConfig.uaConfig.mainThreadOnly = True + self.appConfig.epConfig.uaConfig.threadCnt = 0 self.appConfig.epConfig.uaConfig.mainThreadOnly = True self.appConfig.epConfig.logConfig.writer = self.logger self.appConfig.epConfig.logConfig.level = 5 @@ -136,7 +153,8 @@ class Application(ttk.Frame): self.ep.libStart() # Start polling - self._onTimer() + if not USE_THREADS: + self._onTimer() def updateAccount(self, acc): if acc.deleting: diff --git a/pjsip-apps/src/swig/python/Makefile b/pjsip-apps/src/swig/python/Makefile index 651ea3f7..9417a207 100644 --- a/pjsip-apps/src/swig/python/Makefile +++ b/pjsip-apps/src/swig/python/Makefile @@ -8,7 +8,8 @@ else GCC_EXE= endif -SWIG_FLAGS += -w312 +#USE_THREADS = -threads -DSWIG_NO_EXPORT_ITERATOR_METHODS +SWIG_FLAGS += -w312 $(USE_THREADS) .PHONY: all install uninstall @@ -22,7 +23,7 @@ gcc.exe: cc_mingw.c cp gcc.exe g++.exe pjsua2_wrap.cpp: ../pjsua2.i ../symbols.i Makefile $(SRCS) - swig $(SWIG_FLAGS) -python -o pjsua2_wrap.cpp ../pjsua2.i + swig $(SWIG_FLAGS) -python -o pjsua2_wrap.cpp ../pjsua2.i clean distclean realclean: rm -rf $(PYTHON_SO) pjsua2_wrap.cpp pjsua2_wrap.h pjsua2.py build *.pyc -- cgit v1.2.3