Комментарии 9
Докатились, статьи на Хабре где тупо выкидывают ответ ллм модели…
Ок. Понял.
Этот код можно было взять за основу и доработать. Как минимум взять её него идеи.
Переписал. Полностью рабочий код, только gc что то тупил пришлось пока убрать. Обычно в комбинации с декораторами работает нормально.
Не стоит использовать function composition. Они не обрабатываются стандартным pickle и потому не могут быть переданы на выполнение в соседний поток или процесс. Больше тут: The Ghosts of Distant Objects | PyCon Lithuania 2024 https://pycon.lt/2024/talks/YUXXZS
Спасибо, на досуге почитаю.
@zoldaten, спасибо за вопрос. На всякий случай уточню, что мой предыдущий комментарий относится к этому моменту статьи:
Не используй классы. Применяй Inline-функции def.
Я встречал, как вложенные функции в одну функцию называют functions composition (fc). (без пруфа)
Читать про вложенные функции можно, например, тут https://realpython.com/inner-functions-what-are-they-good-for/#creating-python-inner-functions. правда там обертку для вложенных функций никак не называют.
Описание проблемы "запикливания" функций, содержащих вложенные функции, можно найти тут: https://stackoverflow.com/questions/72766345/attributeerror-cant-pickle-local-object-in-multiprocessing, первый ответ про "pickle can only serialize top-module level functions in general".
По моей ссылке на PyCon надо не читать, а смотреть про то, как чел рассказывает и показывает что врожденный pickle не работает при передаче fc между процессами, и какой костыль они соорудили в библиотеке dill, чтобы сделать это возможным.
В стилистике fc написан FastAPI, благодаря чему он не работает в интеграционных тестах с использованием multiprocessing и авторам Fastapi понадобилось соорудить целый доп класс для тестов. дискуссия по этому поводу тут: https://github.com/fastapi/fastapi/discussions/10213
Как я понял он про передачу данных между процессами, если передавать данные локально, то да лучше сериализавать в pickle.
ParallelBeautifulSoup (BS4-hack)