Посты с тэгом ctypes


[Перевод] Пишем x86-64 комплятор JIT с нуля в стоковом Python

В этой статье я покажу, как написать рудиментарный, нативный x86-64 just-in-time компилятор (JIT) на CPython, используя только встроенные модули.

Код предназначен для UNIX-систем, таких как macOS и Linux, но его должно быть легко транслировать на другие системы, типа Windows. Весь код опубликован на github.com/cslarsen/minijit.

Цель — сгенерировать в рантайме новые версии нижеприведённого ассемблерного кода и выполнить их.

48 b8 ed ef be ad de  movabs $0xdeadbeefed, %rax
00 00 00
48 0f af c7           imul   %rdi,%rax
c3                    retq

В основном, мы будем иметь дело с левой частью кода — байтовой последовательностью 48 b8 ed ... и так далее. Эти 15 байтов в машинном коде составляют функцию x86-64, которая умножает свой аргум


[Из песочницы] Почему важно проверять значения возвращаемые функцией?

Мне очень захотелось поделиться опытом и я хотел бы поговорить о том, почему важно проверять значения возвращаемые функцией. В качестве примера возьмём python и ctypes. Некоторое время назад я столкнулся с достаточно интересным багом суть которого сводилась к тому, что при запуске скрипта на Linux-системе были неправильные данные, но не было трэйсбэка, а на Windows-системе сразу же получали трэйсбэк. Исследование кода показало, что виноваты были некорректные данные даты приходящие в функцию strptime(). Теперь, давайте, посмотрим на пример работы с функцией strptime() в питоне.

Читать дальше →


Высоконагруженные сайты и приложения на Python / Django (29 проектов)


Наша компания довольно давно занимается разработкой больших веб-приложений на Python / Django. В рунете крайне мало информации об этом замечательном языке программирования и фремворке на его основе. Мы решили исправить эту ошибку и рассказать о популярных высоконагруженных сайтах на этой технологии, а также дать много интересных технических подробностей. Для удобства сравнения сайтов между собой мы приводим еще и немного статистики к каждому из проектов. В целом сайтов на Python / Django, конечно, очень много в мире, мы охватим только наиболее интересные по нашему мнению.

Небольшая таблица известных проектов (на основе данных http://builtwith.com/), кликабельно:
Читать дальше →


[Перевод] Производительность в Python. Легкий путь

Всегда знал, что одно из достоинств Python — возможность переписать самые тормозные куски кода на Си и увеличить быстродействие программы до недостижимых интерпретируемым языкам высот. Но сам ни разу не пробовал, т.к. считал что это слишком сложно. После прочтения этой статьи больше так не считаю.

Программисты знакомые с ctypes врядли найдут тут что-то интересное, новичков же прошу под кат.
Читать дальше →



Python threading или GIL нам почти не помеха

Хабы: Python

Наверное всем, кто хоть раз интересовался Python, известно про GIL — его одновременно и сильное и слабое место.
Не мешая однопоточным скриптам работать, он ставит изрядные палки в колеса при многопоточной работе на CPU-bound задачах (когда потоки выполняются, а не висят попеременно в ожидании I/O и т.п.).
Подробности хорошо описаны в переводе двухгодичной давности. Побороть GIL в официальной сборке Python для настоящего распараллеливания потоков мы не можем, но можно пойти другим путем — запретить системе перебрасывать потоки Python между ядрами. В общем пост из серии, «если не нужно, но очень хочется» :)
Если вы знаете про processor/cpu affinity, пользовались ctypes и pywin32, то ничего нового не будет.
Читать дальше →



Архитектура Dropbox


Совсем недавно я написал практически совсем не технический пост про Dropbox, а тут совершенно случайно наткнулся-таки на техническое выступление их сотрудника на PyCon 2011, которая прошла меньше недели назад. Как не трудно догадаться, залогом успеха Dropbox с технической точки зрения оказался Python. Как же Python оказался в сердце бизнес-модели Dropbox?