2007-11-06

PyProcessing

PyProcessing (или просто Processing), отличный инструмент для создания решений, требующих выполнения в многих процессах. Для синхронизации этих процессов существуют такие, всем прекрасно известные по модулю threading, объекты как Lock, Event, Condition и другие, а так же Queue и другие объекты. Так как большую часть времени я работаю под виндой (w2k, что бы быть точным) и когда я натолкнулся на этот пакет была загружена имена эта операционка, естественно все свои тесты я стал проводить под виндой, а через несколько дней появился и "боевой" проект, который я так же стал выполнять и тестировать под виндой (не смотря на то что предполагалось что он будет крутиться на FreeBSD).
Каково же было мое разочарование, когда мне не удалось, даже через час мучений, запустить этот пакет под FreeBSD. Сначала не хватало библиотеки librt, подставил libc, вроде при сборке проглатился. После чего оказалось что не установлены какие-то системные конфигурации (SC_SEMAPHORES и SC_MESSAGE_PASSING), что это такое я не знаю :-(. В общем, поняв, что завести PyProcessing на фрюхе мне не удастся, использовал пакет processing.dummy (разница только в том что dummy создает и синхронизирует потоки, а не процессы). Но тут синхронизация оказалась никудышной, как я понял проблема в модуле Queue в дистрибутиве самого Python 2.4. Сразу два или больше потока могли забрать одни и те же данные из Queue. Короче забил на FreeBSD.
Решил попробовать код на Gentoo (не знаю версию). Собрался пакет без проблем, но работать отказывался ссылаясь на отсутствие некоторых функций (как я понял по сообщению об ошибке) в нативном модуле _processing.so. Короче забил на Gentoo.
Оставалась Debian Etch (это мой домашний десктоп). Тут все прошло идеально, сборка, работа пакета, по используемыми мной компонентами не вызвала никаких нареканий (другие компоненты, например, Condition, SharedArray и т.д. не проверял).
Вот такая вот история. Можно сделать вывод что пакет пусть и очень хорош и полезен, но очень сырой. Использовать его надо с большой осторожностью, так как вероятность того, что он где то не заведется - велика.