Xron on linux: Dispatcher thread stops after a while
Zope 2.2.2, Xron-0-0-9, Python 1.5.2 I'm running this on i386 Linux. I run a development server, with that server running in debus mode (-D). I also run a production server, which runs detached from any console. When I use Xron for a while on my development server, I get the text currentThread(): no current thread for 2051 or something similar printed out to the console. This is caused by a harmless looking debugging line in /usr/lib/python1.5/threading.py Line 523 onwards: def currentThread(): try: return _active[_get_ident()] except KeyError: print "currentThread(): no current thread for", _get_ident() return _DummyThread() My development server just emailed me an error (from standard_error_message): Traceback (innermost last): File lib/python/ZPublisher/Publish.py, line 171, in publish File lib/python/ZPublisher/mapply.py, line 160, in mapply (Object: trigger) File lib/python/ZPublisher/Publish.py, line 112, in call_object (Object: trigger) File lib/python/Products/Xron/XronDTMLMethod.py, line 126, in trigger (Object: purge_pending_bookings) File lib/python/Products/Xron/XronDTMLMethod.py, line 153, in arm (Object: purge_pending_bookings) File lib/python/Products/ZCatalog/CatalogAwareness.py, line 193, in reindex_object (Object: purge_pending_bookings) File lib/python/Products/ZCatalog/CatalogAwareness.py, line 189, in unindex_object (Object: purge_pending_bookings) File lib/python/Products/Xron/Schedule.py, line 99, in uncatalog_object (Object: Traversable) File /var/tmp/python/python-root/usr/lib/python1.5/threading.py, line 287, in set File /var/tmp/python/python-root/usr/lib/python1.5/threading.py, line 233, in notifyAll File /var/tmp/python/python-root/usr/lib/python1.5/threading.py, line 215, in notify File /var/tmp/python/python-root/usr/lib/python1.5/threading.py, line 527, in currentThread IOError: (0, 'Error') Most of the top of the traceback isn't important. What I think is happening is that the print statement on line 527 of threading.py fails, because it is running detached from a console. This produces an IOError, and causes the Xron Dispatcher thread to terminate, and thus stops Xron from working until Zope is restarted. Suggested solutions: The obvious solution is to patch threading.py. This is not good for folks who want to use Xron on a hosting provider's server, where they may not be able to patch the python source. Zope could be made to ensure it provides a /dev/null sort of file for sys.stdout, if it is detached from the console. A workaround would be to use the STUPID_LOG_FILE (or whatever it is called now), as, if I remember correctly, it sends sys.stdout to a file. Xron could do something to ensure that sys.stdout goes somewhere before it calls Event.set(). Xron cannot just put a try: except: block around ScheduleChange.set(), because the call to set the Event would still not succeed. -- Steve Alexander Software Engineer Cat-Box limited http://www.cat-box.net
participants (1)
-
Steve Alexander