Search
Write a publication
Pull to refresh
0
0

Пользователь

Send message

Напишу для тех, кто реально пришел почитать как работает GIL.

GIL делает так, чтобы в единый момент времени работал только 1 поток, остальные потоки спят. Работающий поток засыпает в нескольких случаях: когда python натыкается на I/O операцию, потому что ее обрабатывает операционная система и можно освободить ресурсы, либо когда считает, что текущий поток слишком долго работает. Во втором случае GIL также обращает внимание на метки, которые оставляют спящие потоки, проще говоря они говорят "хочу работать", GIL видит это желание + понимает, что текущий поток слишком долго работает и усыпляет его, при этом будит поток, желающий работать.

Также важная особенность в том, чтобы переключение происходило только во время операций в python, GIL защищает переключение потоков во время исполнения кода на C и возникновения физических ошибок

Но логические ошибки также остаются и защита от них только инструменты модуля threading: Lock, Semaphore, Event, Queue

пример:

#---- поток1
a = 10
#---- переключение на поток 2
a = 20
#---- переключение на поток 1
assert a == 10 # удивляемся почему ошибка, ведь мы не знаем о другом потоке и что он там поменял

Неплохая вторая часть статьи. Пару замечаний:
1. метод .from_orm считается deprecated, необходимо использовать .model_validate(obj_from_db, from_attributes=True)
2. .dict() также считается deprecated, преобразование pydantic модели в dict лучше производить через .model_dump(), там есть удобные параметры типа by_alias, которые дают гибкость к сериализации данных

Классная статья, также по работе с enum можно было рассказать про параметр native_enum, который при отключении будет преобразовывать объекты enum на стороне алхимии, а в базе просто хранить str значение, тогда при добавлении/удалении нового объекта в enum не придется думать, что нужно в миграции дописать руками обновление enum таблицы

	building_type: Mapped[HouseTypeEnum] = mapped_column(  # noqa: F821
		Enum(HouseTypeEnum, native_enum=False, length=255),
	)


Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity