D
djw
Greetings-
I was looking at the ASPN recipe for async I/O and Tkinter:
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/82965
I am interested in using the recipe that is provided in the comments section
for PyQt courtesy of Laura Creighton.
I have a question though....
In the code, it says:
"One important thing to remember is that the thread has to yield
control."
That appears in this code (the thread that will contain the async I/O):
def workerThread1(self):
"""
This is where we handle the asynchronous I/O. For example, it may be
a 'select()'.
One important thing to remember is that the thread has to yield
control.
"""
while self.running:
# To simulate asynchronous I/O, we create a random number at
# random intervals. Replace the following 2 lines with the real
# thing.
time.sleep(rand.random() * 0.3)
msg = rand.random()
self.queue.put(msg)
If you were to use asyncore for this async I/O, there is no yielding that I
can see. Select() doesn't yield, and there is no time.sleep() in the
asyncore.loop() code. Even if I were to add a time.sleep() to the loop,
wouldn't the fact that select() blocks for some timeout value (default=30.0
sec) imply that it would only yield after the select() timed out each time
through the loop? That would seem to make for a pretty unresponsive UI.
Hopefully somebody can clue me into understanding this.
Thanks,
Don
I was looking at the ASPN recipe for async I/O and Tkinter:
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/82965
I am interested in using the recipe that is provided in the comments section
for PyQt courtesy of Laura Creighton.
I have a question though....
In the code, it says:
"One important thing to remember is that the thread has to yield
control."
That appears in this code (the thread that will contain the async I/O):
def workerThread1(self):
"""
This is where we handle the asynchronous I/O. For example, it may be
a 'select()'.
One important thing to remember is that the thread has to yield
control.
"""
while self.running:
# To simulate asynchronous I/O, we create a random number at
# random intervals. Replace the following 2 lines with the real
# thing.
time.sleep(rand.random() * 0.3)
msg = rand.random()
self.queue.put(msg)
If you were to use asyncore for this async I/O, there is no yielding that I
can see. Select() doesn't yield, and there is no time.sleep() in the
asyncore.loop() code. Even if I were to add a time.sleep() to the loop,
wouldn't the fact that select() blocks for some timeout value (default=30.0
sec) imply that it would only yield after the select() timed out each time
through the loop? That would seem to make for a pretty unresponsive UI.
Hopefully somebody can clue me into understanding this.
Thanks,
Don