2010-11-24 3 views
3

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

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

Является ли это плохой практикой (в случае, например, связанным с этим вопросом) использовать промежуточные файлы? Зачем?

ответ

2

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

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

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

+0

Мне хотелось бы получить этот ответ (по крайней мере, ваш первый абзац), за исключением моей работы, мы работали параллельно с 800 программами, используя файлы для связи между процессами ... :) +1 в любом случае для обоснования отставания другого человека , Кто-нибудь еще? – Crisfole 2010-11-24 13:26:11

0

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

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

1

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

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

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

Смежные вопросы