<p dir="ltr">Thanks for the suggestions.  Unfortunately I do need to use Qt 4.6.2 from RHEL 6.  This will also be on an NFS mounted drive.  </p>
<p dir="ltr">This is for a GUI that monitors the output of jobs run on Sun Grid Engine (SGE).  So its not that the files _happen_ to be on NFS, it's actually _required_ that they are :-(</p>
<p dir="ltr">Any Qt4 help would be appreciated.<br>
Am I cleaning up my tail processes correctly?  Is it just the QThreads I'm screwing up?  Are there other hidden dangers with my implementation?</p>
<div class="gmail_quote">On Jun 24, 2013 7:25 PM, "John Lee" <<a href="mailto:jjl@pobox.com">jjl@pobox.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Mon, 24 Jun 2013, Eric Frederich wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I'm trying to tail several files graphically.<br>
I have been trying to find a way to tail several files in a GUI<br>
without much luck at all.<br>
I get errors from tail saying broken pipe.<br>
I get PyQt errors saying underlying C++ objects have been destroyed.<br>
I get other Qt errors saying that threads are still running when the<br>
application exits<br>
etc....<br>
<br>
The implementation posted below seems to suffer from the following errors.<br>
Not all the time.  It depends.<br>
<br>
QThread: Destroyed while thread is still running<br>
QWaitCondition::wakeAll(): mutex lock failure:<br>
</blockquote>
<br>
You're not calling .wait on the threads, and you probably want to give e.g. your QObjects a parent where you can, so that Qt manages the lifetime of the wrapped C++ objects (e.g. pass in self to the parent arg of the QTextBrowser constructor).<br>

<br>
But, I recommend doing it a different way: I find event-based code easier to think about than threads.  So, if you can use Qt5, you might want to do away with the threads and the tail subprocess and replace them with QFileSystemWatcher.  Use event-based code instead of the threads (I'm not talking about Qt events, I just mean hook up to the signals that that class emits and process a little input at a time so as to avoid blocking the UI, using QTimer where needed).  I say Qt5 because Qt4 isn't very friendly to this way of working since it uses threads in the implementation of QFileSystemWatcher.<br>

<br>
Caveat: QFileSystemWatcher still has its problems, but the ones discussed at the URL below are more convenience issues than fundamental problems: I just found I had to experiment a bit to see when the different signals got emitted.<br>

<br>
<a href="http://blog.rburchell.com/2012/03/qt-51-aka-when-qfilesystemwatcher-might.html" target="_blank">http://blog.rburchell.com/<u></u>2012/03/qt-51-aka-when-<u></u>qfilesystemwatcher-might.html</a><br>
<br>
Caveat #2: I imagine QFileSystemWatcher does not support filesystems like NFS, at least on Linux kernels with inotify support (but don't take my word for it, check the source).<br>
<br>
<br>
John<br>
______________________________<u></u>_________________<br>
PyQt mailing list    <a href="mailto:PyQt@riverbankcomputing.com" target="_blank">PyQt@riverbankcomputing.com</a><br>
<a href="http://www.riverbankcomputing.com/mailman/listinfo/pyqt" target="_blank">http://www.riverbankcomputing.<u></u>com/mailman/listinfo/pyqt</a><br>
</blockquote></div>