Почему я не получаю сообщение об ошибке при запуске одного и того же сценария Python на нескольких терминалах одновременно? - PullRequest
0 голосов
/ 23 января 2020

По своему опыту я знаю, что, если я пытаюсь открыть один и тот же файл в Vim одновременно на нескольких терминалах, я получаю сообщение об ошибке. (Может быть из-за временных файлов?)

И по своему опыту я знаю, что если я открою текстовый файл в Python и прочту его, мне придется сбросить указатель, когда я закончу.

Но я обнаружил, что если я одновременно запускаю один и тот же сценарий Python на нескольких терминалах, я не получаю никакой ошибки; он просто успешно запускает скрипт в обоих. Как это работает? Разве Python не нужно читать мой скрипт с самого начала, чтобы запустить его? Скопирован ли сценарий во временный файл или что-то в этом роде?

Ответы [ 2 ]

0 голосов
/ 24 января 2020

Из опыта я знаю, что если я пытаюсь открыть один и тот же файл в Vim на нескольких терминалах одновременно, я получаю сообщение об ошибке.

На самом деле это не так. Vim на самом деле будет позволять вам открывать один и тот же файл в нескольких терминалах одновременно; просто сначала он предупреждает вас о том, что это происходит, поэтому вы можете прервать его, прежде чем вносить изменения. (Не безопасно изменять файл одновременно в двух разных экземплярах Vim, потому что эти два экземпляра вообще не будут координироваться.)

Кроме того, Vim выдаст вам это предупреждение, только если вы попытаетесь открыть тот же самый файл для редактирования в нескольких терминалах одновременно. Он не будет жаловаться, если вы просто открываете файл для чтения (используя флаг -R).

И я по опыту знаю, что если я открою текст файл в Python и прочитав его, я должен сбросить указатель, когда я закончу.

Это тоже не совсем верно. Если вы сделаете несколько отдельных вызовов для open, у вас будет несколько отдельных файловых объектов, и каждый из них отдельно сохраняет свою позицию в файле. Таким образом, что-то вроде

with open('filename.txt', 'r') as first:
    with open('filename.txt', 'r') as second:
        print(first.read())
        print(second.read())

напечатает полное содержимое файла filename.txt дважды .

Единственная причина, по которой вам нужно сбросить позицию, когда вы чтение файла закончено, если вы хотите использовать тот же объект файла для повторного чтения файла, или если вы открыли файл в режиме чтения / записи (r+ вместо r) и теперь вы хотите переключиться с чтение для записи.

Но я обнаружил, что если я запускаю один и тот же сценарий Python на нескольких терминалах одновременно, я не получаю никакой ошибки; он просто успешно запускает скрипт в обоих. Как это работает? Разве Python не нужно читать мой скрипт с самого начала, чтобы запустить его? Скопирован ли сценарий во временный файл или что-то в этом роде?

Как мне теперь должно быть понятно, здесь нет проблем. Нет причин, по которым два экземпляра Python не могут одновременно читать один и тот же файл сценария. Linux позволяет это. (И действительно, если вы удалите файл, Linux будет хранить файл на диске до тех пор, пока все программы, у которых он был открыт, не закроют или не закроют его.)

На самом деле, также нет причин, по которым два процессы не могут записать в один и тот же файл в одно и то же время, хотя здесь вы должны быть очень осторожны, чтобы избежать процессов, вызывающих проблемы друг с другом или повреждающих файл.

0 голосов
/ 23 января 2020

терминал просто запускает команду, которую вы сказали, чтобы выполнить, нет указателя или чего-то еще, что вы просто

...