Szukałem błędu w pewnym wielowątkowym kodzie i trochę czasu mi to zajęło, aż w końcu otworzyłem w edytorze moduł threading z biblioteki standardowej Pythona i znalazłem tam nieudokumentowaną flagę threading._VERBOSE. Okazuje się, że po ustawieniu threading._VERBOSE na True, na stderr pisane są różne ciekawe informacje diagnostyczne, tak jak widać poniżej:
$ python
Python 2.5.2 (r252:60911, Oct 5 2008, 19:24:49)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import threading
>>>
>>> t1 = threading.Thread()
>>> t1.start()
>>>
>>> threading._VERBOSE = True
>>>
>>> t2 = threading.Thread()
>>> t2.start()
MainThread: <Thread(Thread-3, initial)>.start(): starting thread
Thread-3: <Thread(Thread-3, started)>.__bootstrap(): thread started
Thread-3: <Thread(Thread-3, started)>.__bootstrap(): normal return
Thread-3: <Condition(<thread.lock object at 0xb7cfc330>, 0)>.notify(): no waiters
>>>
$
Mając już threading._VERBOSE = True, przyczyna błędu szybko stała się oczywista – deadlock
@fourthrealm
Spędziłem sobie właśnie kilka godzin na szukaniu błędu w kodzie, po czym okazało się, że błąd był w kodzie biblioteki, z której korzystałem, i błąd ten występuje tylko w trunku SVN-owym tejże biblioteki. Oczywiście są dwie szkoły, “kod w trunku może nie kompilować się/nie działać, stabilne są branche” i “cały rozwój jest w branchach, a trunk musi się kompilować/działać”. Osobiście jestem z tej drugiej szkoły, ale to nie ma znaczenia, ważne jest to, żeby dokumentować to, co się wybrało, proces musi być jasny. Wystarczy krótka informacja na stronie projektu w sekcji “For developers” i zaoszczędzi się innym sporo czasu. Jeśli ktoś ma ochotę na inne dobre rady na temat prowadzenia projektów i community, w szczególności opensource’owych, to zachęcam do przeczytania książki The Art of Community, napisanej przez community managera Ubuntu, bardzo pouczająca lektura.
W trakcie szukania błędu przeczytałem przy okazji release notes dla WebSphere MQ 7.0 i rozbawiła mnie informacja na temat JMS-owych bundli OSGi WMQ “The OSGi bundles shipped with WebSphere MQ classes for JMS client are not working.” Krótko i na temat. Nie mamy Pańskiego płaszcza i co nam Pan zrobi.
@fourthrealm