Changeset 427


Ignore:
Timestamp:
28.07.2011 15:54:49 (8 years ago)
Author:
marcus
Message:

Introducing wxAnyThread: Unresolved issue using pubsub because of argument testing (decorator changes it).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • SHX/trunk/sandbox/pubsubthread.py

    r426 r427  
    33import threading 
    44import time 
     5import wx 
     6from random import randint 
    57from SeismicHandler.utils.pubsub import pub as msgs 
     8from SeismicHandler.utils.wxAnyThread import anythread 
    69 
    710class thready(threading.Thread): 
    8     def __init__(self, name): 
     11    def __init__(self, name, main): 
    912        threading.Thread.__init__(self) 
     13        self.name = "thread.%s" % name 
     14        self.main = main 
    1015 
    11 #        msgs.subscribe(self.monitor, msgs.ALL_TOPICS) 
    1216        msgs.subscribe(self.monitor, "thread.%s" % name) 
    1317 
     18    def run(self): 
    1419        self.stopped = False 
    15         self.name = "thread.%s" % name 
     20        lastminute = -1 
    1621 
    17     def run(self): 
    1822        while not self.stopped: 
    19             print time.strftime("%H:%M:%S", time.localtime()), self.name 
    20             time.sleep(1) 
     23            thisminute = time.localtime()[5] 
     24            # heartbeat every 5 seconds 
     25            if thisminute != lastminute and not thisminute % 5: 
     26                lastminute = thisminute 
     27                print time.strftime("%H:%M:%S", time.localtime()), \ 
     28                                                         "heartbeat", self.name 
    2129 
    22     def monitor(self, content, topic=msgs.AUTO_TOPIC): 
    23         print time.strftime("%H:%M:%S", time.localtime()), topic, content 
     30            # random update of main threads status bar 
     31            if randint(0, 20) == 10: 
     32#                msgs.sendMessage("ui.change.statustext", text=self.name) 
     33                self.main.UpdateStatusText(text=self.name) 
     34 
     35            time.sleep(.1) 
     36 
     37    def monitor(self, content): 
     38        print time.strftime("%H:%M:%S", time.localtime()), self.name, \ 
     39                                                            "received", content 
    2440        if not self.name.endswith("zwo"): 
    2541            msgs.sendMessage("thread.zwo", content="test") 
     
    2844        self.stopped = True 
    2945 
     46 
     47class MinimalApp(wx.Frame): 
     48    def __init__(self, *args, **kwargs): 
     49        wx.Frame.__init__(self, None, *args, **kwargs) 
     50 
     51        self.CreateStatusBar() 
     52        self.SetStatusText("no text") 
     53 
     54        self.Bind(wx.EVT_CLOSE, self.OnQuit) 
     55 
     56        tlist = ['eins', 'zwo'] 
     57 
     58        for i, name in enumerate(tlist): 
     59            tlist[i] = thready(name, self) 
     60            print time.strftime("%H:%M:%S"), "start", name 
     61            tlist[i].start() 
     62        self.tlist = tlist 
     63 
     64        msgs.subscribe(self.UpdateStatusText, "ui.change.statustext") 
     65#        print msgs.exportTopicTree() 
     66 
     67        self.Show() 
     68 
     69    def OnQuit(self, evt): 
     70        for t in self.tlist: 
     71            print time.strftime("%H:%M:%S"), "stopping", t.name 
     72            t.stop() 
     73            t.join() 
     74        evt.Skip() 
     75 
     76    @anythread 
     77    def UpdateStatusText(self, **kwargs): 
     78        self.SetStatusText(kwargs.get("text", "")) 
     79 
     80 
     81def monitorGlobal(topic=msgs.AUTO_TOPIC, **kwargs): 
     82    print time.strftime("%H:%M:%S", time.localtime()), "monitorGlobal", topic, kwargs 
     83msgs.subscribe(monitorGlobal, msgs.ALL_TOPICS) 
     84 
     85 
    3086if __name__ == "__main__": 
    31     tlist = ['eins', 'zwo'] 
    32      
    33     for i, name in enumerate(tlist): 
    34         tlist[i] = thready(name) 
    35         print "-> start", name 
    36         tlist[i].start() 
     87# 
     88#    time.sleep(1) 
     89#    msgs.sendMessage("thread.eins", content="nummer 1") 
     90#    msgs.sendMessage("thread.zwo", content="nummer 2") 
     91#    time.sleep(1) 
     92# 
     93# 
     94#    print "-> end" 
    3795 
    38     time.sleep(1) 
    39     msgs.sendMessage("thread.eins", content="nummer 1") 
    40     msgs.sendMessage("thread.zwo", content="nummer 2") 
    41     time.sleep(1) 
    42  
    43     for t in tlist: 
    44         print "-> stop", t.name 
    45         t.stop() 
    46         t.join() 
    47  
    48     print "-> end" 
     96    app = wx.App(redirect=False) 
     97    frm = MinimalApp(title="wx pubsub threading test", size=(400,50)) 
     98    app.MainLoop() 
Note: See TracChangeset for help on using the changeset viewer.