Очевидное решение, именно то, которое я встречал чаще всего, когда только начал заниматься этим вопросом, состоит в полном отказе от исключений в таких callback`ах. Но это, вестимо, не наш случай.
А чем конкретно вас не устроил общепринятый подход, что потребовалось изобретать свой велосипед с не совсем круглыми колесами?
Проект практически завершен. Но пятикратного увеличения, на которое расчитывали, добиться не смогли — только ~1.5. GIL тоже никуда не делся. Зато возросло потребление памяти и уменьшилась скорость запуска. Подробнее в презентации на PyCon2010.
Проект будет влит в CPython 3.3-3.4 (PEP). Сейчас доработка ведется в бранче py3k-jit.
То, что человек «хорошо кодит на си» совсем не означает, что он способен разработать, скажем, новый алогоритм для joins в RDBMS.
Все таки стоит различать прикладных программистов на Си и программистов на Си, которым придется заниматься разработкой и улучшением фундаментальных алгоритмов.
Требования и вопросы на собеседовании к ним должны быть разными.
При определенных условиях это дает значительный выигрыш в быстродействии.
$(«table td»).live() найдет все td и повесит на document обработчик. Сами найденные td ему не нужны, но их поиск может занять много времени.
$(«table»).delegate(«td») будет искать только table.
blockquote не объявлен устаревшим ни в одном из существующих стандартов. Да и семантически его нечем заменить. Объявлено устаревшим его не семантическое использование для создания отступов.
Про метапрограммирование в статье как раз мало чего. Она толи о __dict__, толи о том, что все методы не более чем обычные функции с дополнительной обвязкой, толи еще о чем-то…
На мой взгляд автору следовало бы раскрыть какой-нибудь один вопрос, но подробно. А получилось «Ухты, вот так можно. А я еще знаю, что и вот так можно, и вот так».
Вот только человек, который придет поддерживать проект после вас ни один раз вспомнит вас нехорошим словом. Да и в продакшн код с таким маргинальным подходом лично я бы никогда не пустил.
Если требуются такие ухищрения, то стоит подумать об использования другого инструмента, т.к. питон для вашей задачи, возможно, плохо подходит.
return colors[colorIndex++] || colors[colorIndex = 0, colorIndex++];
вы напишете
return colors[(colorIndex++) % colors.length];
то тот, кто будет поддерживать этот код, будет реже вспоминать вас матом.
Зачет-то хоть получили? :-)
docs.python.org/library/dis.html: Bytecode is an implementation detail of the CPython interpreter!
Процесс, если интересно, можно посмотреть в файле compile.c
Что-то не нашел как связаться с автором. Если кто может, то напишите ему, пожалуйста, пока не начали через него спам рассылать или еще чего похуже.
А чем конкретно вас не устроил общепринятый подход, что потребовалось изобретать свой велосипед с не совсем круглыми колесами?
Это не совсем верно.
Проект практически завершен. Но пятикратного увеличения, на которое расчитывали, добиться не смогли — только ~1.5. GIL тоже никуда не делся. Зато возросло потребление памяти и уменьшилась скорость запуска. Подробнее в презентации на PyCon2010.
Проект будет влит в CPython 3.3-3.4 (PEP). Сейчас доработка ведется в бранче py3k-jit.
Все таки стоит различать прикладных программистов на Си и программистов на Си, которым придется заниматься разработкой и улучшением фундаментальных алгоритмов.
Требования и вопросы на собеседовании к ним должны быть разными.
$(«table td»).live() найдет все td и повесит на document обработчик. Сами найденные td ему не нужны, но их поиск может занять много времени.
$(«table»).delegate(«td») будет искать только table.
{% endif %}
Да и в исключении ясным английским языком написано в чем ваша ошибка.
>>> class A(object): pass
…
>>> class B(object): pass
…
>>> C = type('C', (A, B), {})
>>> c = C()
>>>
Ну и такой вам тонкий намек: «classic classes» и модуль new — deprecated и в питоне 3 удалены.
www.picamatic.com/show/2009/07/15/05/28/4448772_349x115.jpg
На мой взгляд автору следовало бы раскрыть какой-нибудь один вопрос, но подробно. А получилось «Ухты, вот так можно. А я еще знаю, что и вот так можно, и вот так».
С = type('NewClass', (A,B), {})
с = С()
Вот только человек, который придет поддерживать проект после вас ни один раз вспомнит вас нехорошим словом. Да и в продакшн код с таким маргинальным подходом лично я бы никогда не пустил.
Если требуются такие ухищрения, то стоит подумать об использования другого инструмента, т.к. питон для вашей задачи, возможно, плохо подходит.