[prev in list] [next in list] [prev in thread] [next in thread]
List: pykde
Subject: RE: [PyKDE] Help with SIP
From: "Claus, Richard" <claus () slac ! stanford ! edu>
Date: 2004-12-23 20:52:46
Message-ID: 35C208A168A04B4EB99D1E13F2A4DB0120C825 () exch-mail1 ! win ! slac ! stanford ! edu
[Download RAW message or body]
The C++ part of my module is a collection of iterators over, and accessors to a \
buffer of data. It doesn't depend on any other packages (e.g. Qt). SIP is used to \
provide an interface to this package from Python. In some Python environments, the \
result is a single threaded program, not using Qt, PyQt, etc. In other environments, \
my package is used in the presence of Qt, PyQt, and various other packages. In order \
to keep Qt GUI screen updates crisp, we've seperated that application into multiple \
Python threads. The one Qthread we have is used for communicating GUI requests from \
a Python thread to the GUI thread. My module is run purely from one of the Python \
threads.
There is some small amount of handwritten SIP code, yes, although it was signficantly \
reduced in the move from SIP 3 to 4.
No, there are no threads or other system calls in the package itself. However, users \
may resolve some of the module's virtual methods with Python code that does use \
system calls or functions that affect the GIL. Prints in the SIP generated cpp and a \
test virtual method don't appear in the non -g case, so it's not getting far enough \
to exercise problems caused by such user code.
BTW, I forgot to ask how to use SIP's debug printing option (-r). Naively turning it \
on doesn't show anything on stdout. Is there a run-time flag that must be enabled? \
I don't see it described in the SIP documentation.
One fly in the ointment that may affect this discussion is that the C++ class in \
which the problem occurs is derived from an abstract base class. The derived class \
provides implementations for the base class's pure virtual methods, in addition to \
other functionality. Both the derived class and the base class are exposed to Python \
with SIP since in some applications one wants the one and in others the other. The \
derived class and the base class have their own SIP files which don't contain any \
handwritten SIP code. Oddly, I found that I had to declare the pure virtual methods \
of the base class that were resolved by the C++ derived class, and thus no longer \
needing exposure to Python, in the SIP code or they wouldn't be called. When SIPed \
without -g, I see that a print in one of these C++ resolved virtual methods doesn't \
appear before the hang, so I unfortunately misspoke in my previous post. With the \
-g, it does appear.
Thanks,
Ric
________________________________
From: Phil Thompson [mailto:phil@riverbankcomputing.co.uk]
Sent: Wed 12/22/2004 11:53 PM
To: pykde@mats.imk.fraunhofer.de
Cc: Claus, Richard
Subject: Re: [PyKDE] Help with SIP
On Thursday 23 December 2004 1:18 am, Claus, Richard wrote:
> I've built a package using C++ and SIP 4.1.1 (on both Windows XP and Linux)
> that can be imported and used from Python 2.3.4. In a single threaded
> environment, without PyQt, it works as expected. In a multi-threaded
> environment with PyQt, I observe the following: 1) When the package is
> built using SIP without the -g option, the program hangs at the point of
> calling the first virtual method resolved by a Python method. The PyQt GUI
> is no longer updated or redrawn and the program must be killed. 2) When the
> package is built using SIP with -g option, the program appears to run
> correctly, but sooner or later a bomb box (on XP) appears with the Python
> message "this thread state must be current when releasing".
>
> Can someone please offer some suggestions on how to debug this?
Is there any handwritten code in your module? Does the package use threads
itself? What do you mean by a multi-threaded environment - compiled against
qt-mt rather that qt, or in an application that starts multiple threads?
Phil
_______________________________________________
PyKDE mailing list PyKDE@mats.imk.fraunhofer.de
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic