Changeset 90

Show
Ignore:
Timestamp:
05/30/04 15:17:16 (5 years ago)
Author:
jajcus
Message:

- profiling support added (--profile option) and 100% CPU consumption problem hopefully fixed

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/jjigw.py

    r81 r90  
    2525import os.path 
    2626 
    27 config_dir,data_dir=".","." 
     27def main(profile=False): 
     28    config_dir,data_dir=".","." 
    2829 
    29 try: 
    3030    try: 
    31         config=Config(config_dir,data_dir) 
    32     except: 
    33         print >>sys.stderr,"Couldn't load config file:",str(sys.exc_value) 
     31        try: 
     32            config=Config(config_dir,data_dir) 
     33        except: 
     34            print >>sys.stderr,"Couldn't load config file:",str(sys.exc_value) 
     35            sys.exit(1) 
     36 
     37        print "creating component..." 
     38        c=Component(config,profile=profile) 
     39 
     40        print "starting..." 
     41        c.run(1) 
     42    except JJIGWFatalError,e: 
     43        print e 
     44        print "Aborting." 
    3445        sys.exit(1) 
    3546 
    36     print "creating component..." 
    37     c=Component(config) 
    38  
    39     print "starting..." 
    40     c.run(1) 
    41 except JJIGWFatalError,e: 
    42     print e 
    43     print "Aborting." 
    44     sys.exit(1) 
     47if sys.argv[1]=='--profile': 
     48    import profile 
     49    sys.argv[1:]=sys.argv[2:] 
     50    profile.run("main(profile=True)","jjigw.prof") 
     51else: 
     52    main() 
    4553 
    4654# vi: sts=4 et sw=4 
  • trunk/jjigw/component.py

    r82 r90  
    3333 
    3434class Component(pyxmpp.jabberd.Component): 
    35     def __init__(self,config): 
     35    def __init__(self,config,profile=False): 
    3636        pyxmpp.jabberd.Component.__init__(self,config.jid, 
    3737                config.connect.secret,config.connect.host,config.connect.port, 
    3838                category="gateway",type="irc") 
     39        self.profile=profile 
    3940        self.shutdown=0 
    4041        signal.signal(signal.SIGINT,self.signal_handler) 
  • trunk/jjigw/ircsession.py

    r86 r90  
    4949        self.jid=jid 
    5050        self.nick=nick 
     51        if self.component.profile: 
     52            ttarget=self.thread_run_prof 
     53        else: 
     54            ttarget=self.thread_run 
    5155        self.thread=threading.Thread(name=u"%s on %s as %s" % (jid,self.network.jid,nick), 
    52                 target=self.thread_run
     56                target=ttarget
    5357        self.thread.setDaemon(1) 
    5458        self.exit=None 
     
    147151            resource=unicode(user,self.default_encoding,"replace") 
    148152            return JID(node,self.network.jid.domain,resource) 
     153         
     154    def thread_run_prof(self): 
     155        import profile 
     156        p=profile.Profile() 
     157        p.runcall(self.thread_run) 
     158        p.create_stats() 
     159        p.dump_stats("jjigw-%s.prof" % (threading.currentThread().getName().replace("/","_"),)) 
    149160 
    150161    def thread_run(self): 
     
    188199                sock=self.socket 
    189200                if sock is None: 
     201                    self.debug("sock is None") 
    190202                    continue 
    191203                self.lock.release() 
     
    199211                        input,self.input_buffer=self.input_buffer.split("\r\n",1) 
    200212                        self._safe_process_input(input) 
     213                elif self.socket in ed: 
     214                    try: 
     215                        self.socket.close() 
     216                    except: 
     217                        pass 
     218                    self.socket=None 
     219                    self.exited=1 
    201220            finally: 
    202221                self.lock.release()