Python - Являются ли методы класса многопроцессными безопасными? - PullRequest
2 голосов
/ 18 ноября 2010

У меня есть класс, который перебирает некоторые файлы данных, обрабатывает их, а затем записывает новые данные обратно. Анализ каждого файла полностью независим от других. Класс содержит информацию, необходимую для анализа, в своих атрибутах, но анализ не должен изменять какие-либо атрибуты класса. Таким образом, я могу сделать анализ одного файла данных единственным методом моего класса. Анализ в принципе может быть выполнен параллельно, поскольку каждый файл данных является независимым. Кроме того, я собирался сделать свой класс повторяемым.

Могу ли я использовать многопроцессорный модуль для порождения процессов, которые являются методами моего класса? Мне нужно использовать многопроцессорность, потому что я использую сторонний код, который имеет очень серьезную утечку памяти (заполняет все 24 ГБ памяти после примерно 100 файлов данных).

Если нет, как бы вы поступили так? Вы бы просто использовали обычную функцию, вызываемую моим классом (передавая всю необходимую мне информацию в качестве аргументов) вместо метода? Как аргументы передаются функциям в многопроцессорной обработке? Это делает глубокую копию?

Ответы [ 2 ]

1 голос
/ 18 ноября 2010

Да, если вы не обновляете данные о самом классе, которые должны совместно использоваться экземплярами, в этом случае вам подойдет многопроцессорная обработка.

0 голосов
/ 18 ноября 2010

Вы не упоминаете о своем процессе, использующем какие-либо внешние ресурсы, поэтому он должен быть fork () - безопасным.Форк дублирует дескрипторы памяти и файлов, состояние программы идентично у родительского и дочернего.Если вы не используете окна, которые не могут быть разветвлены, продолжайте.

...