> Message: 6
> Date: Thu, 20 Mar 2008 16:07:15 +0530
> From: "Tejovathi P" <[EMAIL PROTECTED]>
> Subject: [python-win32] Regarding Threads and locals()
> To: python-win32@python.org, [EMAIL PROTECTED]
> Message-ID:
> <[EMAIL PROTECTED]>
> Content-Type: text/plain; charset="iso-8859-1"
>
> Hi all,
>
> I have a GUI applicaion(along with threads). When the run
> button is pressed
> in the GUI a separate thread starts( Thread is created using
> beginthreadex)
> and does the
> required activity.
> Now, while the thread is being executed, i want the locals()
> present inside
> the thread's run function to be avaialbe in the GUI class
> from where the
> thread class is being created
>
> EG:
>
> *main.py*
>
> class WorkerThread(threading.Thread):
>
> def __init__(self, ):
> threading.Thread.__init__(self)
> # Start the thread and invoke the run method
> self.start()
>
> def run(self):
> # Start the thread. It executed self.func() as a
> separate thread
> self.workerThread, tid =
> win32process.beginthreadex(None, 0 ,
> self.func ,(), 1)
> .......
>
> def func(self):
> execfile(temp.py)
>
> class GUI(wxFrame):
> def __init__(self):
> .....
> .....
> def CreateThread(self):
>
> self.workerThread = WorkerThread()
>
>
> if name == _main_:
> .....
> . ....
> . .....
>
> *temp.py*
>
> i = 1 j = 2
> k = 4
> while(10000):
> print i
> print j
> print k
> i = 1+1
> j = j+2
> k = k + 3
>
>
> Now, while the thread is executin func and printing i, j, k ,
> In the main
> GUI thread how do i get the values of i, j ,k
> I tried with sys.modules, sys._current_frames, vars(). But
> nothing worked
> out.
>
> Ideally the locals() of func() should be passed to the GUI
> thread, how?
One of the recommended ways of doing this is to have the thread write that
information to a file either send an event to the GUI that there's data
there or use a timer in the GUI event loop that looks for that file. I'm
actually messing with Tim Golden's watch_directory.py file for a VPN
project I'm working on in which my wxPython GUI app watches a file for
changes and then reads it.
You can check out Golden's work here:
http://tgolden.sc.sabren.com/python/win32_how_do_i/watch_directory_for_cha
nges.html
The Python docs talk about using the threading module's event object for
basic communication, which is what I was talking about:
http://docs.python.org/lib/event-objects.html
In wxPython, I can wait for a threading event and then use a wx.PostEvent
to let my GUI know that the thread had an event. I'm sure there are
similar methods in Tkinter and pyGTK or whatever you're using.
Mike
_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32