Являются ли промежуточные файлы плохой практикой? - PullRequest
3 голосов
/ 24 ноября 2010

Меня недавно понизили (что только немного меня раздражало :)) за ответ, который я дал на этот вопрос .Этот человек не дал объяснения по поводу голосования «против», которое заставило меня задуматься: «Почему бы вам не создать промежуточные файлы?»Особенно на таком языке, как Python, где File IO выглядит просто смехотворно.

Казалось, что все согласны с тем, что это плохая идея, но я знаю, что промежуточные файлы регулярно используются на практике.Я работал в очень уважаемой исследовательской фирме (скажем так, SO не существовало бы без этой фирмы), где предполагалось, что ваши программы будут генерировать файлы в качестве вывода.Мы сделали это потому, что если ваша программа действительно заслуживает , чтобы быть автономной программой, то ей потребуются отладочные выходные данные и какой-то способ передачи их выходных данных между процессами, которые впоследствии можно будет изучить в случае, если мы обнаружим ошибку в наших выходных данных далееdownstream.

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

Ответы [ 3 ]

2 голосов
/ 24 ноября 2010

Одна проблема с промежуточными файлами возникает при многопоточности.

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

Я полагаю, что одна из философий Unix заключается в том, что все программы должны действовать как фильтры, однако это не обязательно означает создание файлов на диске, а использование промежуточных файлов, на мой взгляд, приводит к громоздкому поведению. Также следует рассматривать диск как последнее средство и использовать его только для хранения / извлечения данных, которые должны быть доступны после выключения компьютера, и, возможно, даже позаботиться о том, чтобы программы могли работать на носителе только для чтения.

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

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

1) Расположение файла на удаленном компьютере, и сеть не работает.(NFS установлен).
2) Недостаточно свободного места при создании файла.
3) В промежутке между процессами пользователь нажимает Ctrl-C, чтобы отменить процесс, файл не удаляется.
4) Файл монтируется в NFS, и сеть работает медленно.
5) Папка, в которой был создан файл, была мягкой ссылкой, а исходная ссылка была удалена.

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

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

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

Практически нетвещи в ИТ, которые вы не можете использовать, имея на то веские основания.: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...