Как написать make-файл для Python (превратить в исполняемый файл)?

Одно из основных применений мьютекса - гарантировать, что единственный код, который когда-либо увидит общий объект в состоянии, не удовлетворяющем его инвариантам, - это код, который (надеюсь, временно) помещает объект в это состояние. Нормальный шаблон для кода, который должен изменить объект:

  1. Получить мьютекс
  2. Внести изменения в объект, из-за которого его состояние становится недействительным
  3. Внесите изменения в объект, из-за чего его состояние снова станет действительным
  4. Отпустите мьютекс

Если что-то пошло не так после того, как №2 началось и до того, как №3 закончил, объект может быть оставлен в состоянии, которое не удовлетворяет его инвариантам. Поскольку правильный шаблон заключается в том, чтобы освободить мьютекс перед его удалением, тот факт, что код предоставляет мьютекс, не выпуская его, означает, что что-то пошло не так. Таким образом, может быть небезопасно вводить код в мьютекс (поскольку он не был выпущен), но нет причин ждать выхода мьютекса (поскольку - если он был удален - он никогда не будет) , Таким образом, правильный ход действий - это исключение.

Шаблон, который несколько лучше, чем тот, который реализован объектом mutex .NET, заключается в том, чтобы метод «приобретать» возвращал объект IDisposable который инкапсулирует не мьютекс, а скорее его частное приобретение. Утилизация этого объекта приведет к отмене мьютекса. Код может выглядеть примерно так:

using(acq = myMutex.Acquire())
{
   ... stuff that examines but doesn't modify the guarded resource
   acq.EnterDanger();
   ... actions which might invalidate the guarded resource
   ... actions which make it valid again
   acq.LeaveDanger();
   ... possibly more stuff that examines but doesn't modify the resource
}

Если внутренний код не работает между EnterDanger и LeaveDanger, тогда объект сбора должен аннулировать мьютекс, вызывая Dispose на нем, поскольку охраняемый ресурс может находиться в поврежденном состоянии. Если внутренний код выходит из строя в другом месте, мьютекс должен быть освобожден, поскольку охраняемый ресурс находится в допустимом состоянии, а код в блоке using больше не понадобится. У меня нет каких-либо конкретных рекомендаций библиотек, реализующих этот шаблон, но это не особенно сложно реализовать в качестве обертки вокруг других видов мьютексов.

0
задан Gan Sama 17 February 2019 в 17:47
поделиться

1 ответ

Извините, если мне чего-то не хватает, но почему сценарий .py не может быть исполняемым?

Пока в системе установлен интерпретатор Python, Вы можете запустить .py файлы из оболочки. Я не вижу необходимости для вас «запустить» скрипт.

В любом случае вы можете создать скрипт с командой, которую хотите выполнить, в этом случае:

python main.py

или

python main.py && python utility.py 

для запуска более одного скрипта Python сразу.

(Всегда обращая внимание на настоящее имя интерпретатора python, присутствующего в вашей системе. Это может быть python37, python27 ...)

Возможно, в вашей конкретной проблеме есть что-то, чего я не понимаю право ...

Я рад продолжить обсуждение

.
0
ответ дан francovici 17 February 2019 в 17:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: