Как этого добиться: после выполнения функции все восстанавливается в состояние до ее вызова. Можно ли использовать fork Python

Программы на Python
Ответить
Anonymous
 Как этого добиться: после выполнения функции все восстанавливается в состояние до ее вызова. Можно ли использовать fork

Сообщение Anonymous »

Иногда мне приходилось создавать «пробную» версию функции.
В качестве простого примера: при разработке оценщика я мог бы захотеть выполнить предварительную оценку, чтобы увидеть, является ли текущая информации о зависимостях достаточно или нет. В этом случае я буду вызывать функцию eval так, как если бы она была пробной, т. е. меня интересует только ее возвращаемое значение bool, которое указывает на успех/неуспех. Самое главное, поскольку это всего лишь предварительная попытка, я хотел бы сохранить все в неизменном виде на протяжении всего выполнения, другими словами, никакие данные, такие как зависимость/счетчик/memoi/и т. д., не различаются до и после проверки.Теперь, если функция проверки достаточно проста, я, конечно, могу создать новую функцию, имитирующую старую, за исключением того, что каждая операция записи вместо этого выполняется в глубокой копии и т. д.
Однако, если функция имеет некоторые тысячи строк кода с переплетенной логикой. Писать новый уже нецелесообразно. Я могу полагаться только на систему регрессии, которая поможет выявить как можно больше проблем и принять на себя потенциальный риск.
Поэтому мне интересно
  • Есть ли какой-либо четко определенный способ добиться этого?
  • Можно ли использовать fork для реализации этого в Linux? то есть родительский процесс просто ничего не делает, а ждет дочерний процесс, дочерний выполняет функцию проверки и передает целевое значение родителю по каналу. Если моя память не так сильно заржавела, fork использует схему копирования при записи, поэтому она напоминает процесс, описанный выше, и я ожидаю, что накладные расходы будут относительно небольшими. Есть ли опасность при этом?
РЕДАКТИРОВАТЬ:
Как попытка сделать это вопрос более конкретный, я хотел бы применить некоторые ограничения к функции проверки:
  • Гарантируется, что такая функция каким-либо образом не взаимодействует с внешним процессом, т. е. нет сетевого сокета, нет RPC. Чтобы еще больше упростить, давайте предположим, что локального IPC не существует.
  • Эта функция не содержит ничего неопределенного, т. е. не нужно беспокоиться о касании random_device, curandstate и т. д.
    Гарантируется, что функция достигнет точки возврата при условии, что не будет создано исключение. Если во время выполнения выдается какое-либо исключение, просто перехватите все в начале вызова функции, выведите сообщение и прекратите проверку.
  • Что-нибудь еще, чтобы прояснить этот вопрос? пожалуйста, научите.


Подробнее здесь: https://stackoverflow.com/questions/792 ... d-to-the-s
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»