2 недели назад
🖥 Python `multiprocessing` и ловушка, о которую бьются даже опытные разрабы
В старых версиях Python на Linux multiprocessing часто стартовал процессы через fork(). И вот где начинается боль. После fork() в дочернем процессе остаётся только один поток. Но состояние мира копируется как было: * lock мог быть захвачен * file descriptors всё ещё указывают на те же файлы * сокеты и буферы могут оказаться в странном состоянии * другой поток, который должен был отпустить lock, уже не существует Это поведение POSIX. Поэтому fork + threads — классический рецепт для редких, мерзких deadlock’ов...
3 недели назад
🦋 Julia против медленного Python: можно ли наконец перестать писать одну программу дважды?
Python стал главным языком научных вычислений не потому, что быстрее конкурентов. Скорее наоборот: обычный цикл на Python способен проиграть хорошо скомпилированному коду в десятки, а иногда и в сотни раз. Python победил благодаря другому качеству — он позволяет быстро превратить идею в работающую программу. Но за эту лёгкость исследователи нередко платят дважды. Сначала они создают понятный прототип на Python, а затем переписывают самые тяжёлые участки на C, C++ или Rust. Между двумя частями приходится...