PyQt and async I/O

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
 
A

Andrew Bennetts

]
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.

Twisted has support for Qt -- see the 'twisted.internet.qtreactor' module.
That might give you some ideas; alternatively, you could just use Twisted
and stop worrying ;)

-Andrew.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,734
Messages
2,569,441
Members
44,832
Latest member
GlennSmall

Latest Threads

Top