[PyQt] PyQt coroutines implementation
phil at riverbankcomputing.com
Sun Dec 12 10:37:00 GMT 2010
On Tue, 9 Nov 2010 22:40:05 +0500, Kirill Kostyuchenko
<kisel2626 at gmail.com> wrote:
> Hello Phil.
> I was impressed with the python coroutines idea and wrote small
> implementation for the PyQt: http://github.com/ddosoff/pyqtcoroutines
> Nonpreemptive multithreading programs looks synchronous:
> from pyqtcoroutines.coroutines import Scheduler
> # coroutine example
> def inserter( a_lot_of_records ):
> for record in a_lot_of_records:
> # do small piece of work here
> ... insert one record to the sql database ...
> # This is execution trap
> # Unlike QCoreApplication.processEvents()
> # we do not call new restricted event loop,
> # we will NORMALLY RETURN to the main qt event loop!
> # handle all exceptions in synchronous manner
> # create scheduler to execute our inserter(..) later
> s = Scheduler()
> # It's not the inserter() call!
> # We construct the built-in python Generator object!
> # Execution will start after the first
> # coroutine.send( None ) call inside the Scheduler.
> coroutine = inserter( a_lot_of_records )
> # Let the Scheduler to start execution of
> # inserter(..) later inside the main qt event loop.
> s.newTask( coroutine )
> Full example : http://github.com/ddosoff/pyqtcoroutines
I'd be interested to know people's opinion of the new futures module...
...and how it compares with QtConcurrent.
It might be possible to write an Executor that wraps the QtConcurrent
implementation - or maybe QtConcurrent doesn't add anything to what
More information about the PyQt