Я получаю довольно странное состояние гонки в Mac OS X с Python (я тестировал только Python 3.3). Я делаю несколько временных каталогов, записываю в них что-то, а затем очищаю их. Что-то в духе
while running:
(do something)
tempdir = mkdtemp('name')
try:
(write some stuff to tempdir)
finally:
shutil.rmtree(tempdir)
Однако в некоторых из более поздних циклов (write some stuff to tempdir)
я получаю такие ошибки, как
with open(os.path.join("/var/folders/yc/8wpl9rlx47qgzxqpcf003k280000gn/T/tmp0fh2ztname", "file"), 'w', encoding='utf-8') as fn:
FileNotFoundError: [Errno 2] No such file or directory: '/var/folders/yc/8wpl9rlx47qgzxqpcf003k280000gn/T/tmpups5dpname/file'
(Для ясности я указал путь к временному каталогу)
Обратите внимание, что открываемый путь отличается от пути, который он не может найти. В каждом случае путь в сообщении об ошибке — это временный каталог из предыдущей итерации цикла.
Ошибка воспроизводится большую часть времени в одном и том же месте (примерно после четвертой итерации), но не каждый раз.
РЕДАКТИРОВАТЬ: я только что понял, что это, вероятно, актуально. Материал (write some stuff to tempdir)
на самом деле происходит в подпроцессе. Вот как я уверен в пути tempdir, я должен передать его подпроцессу (на самом деле я солгал о бите «ясности», я на самом деле пишу файл Python с этой точной строкой with open
). Так я точно знаю, что путь tempdir действительно отличается от используемого.
python -c [code]
. В подпроцессе довольно легко просто передать произвольный блок кода (включая новые строки и отступы). Это позволит избежать необходимости создавать файлы Python на диске и рисковать какой-либо файловой системой или гонкой кэширования байт-кода Python. - person nneonneo   schedule 25.03.2014