Python tempfile модуль и потоки не играет по правилам; что я делаю неправильно?

Выезд Reuxables, хотя это прибывает в стоимость.

6
задан Schof 14 December 2009 в 19:44
поделиться

5 ответов

Since nobody was able to replicate the problem, I went hunting around our office for machines. It passed on everything except my machine. I tested on a Mac with the same software versions I was using. I even went hunting for a Desktop G5 with the EXACT same hardware and software config I had -- same result. Both tests (with tempfile and without tempfile) succeeded on everything.

For kicks, I downloaded Python 2.6.4, and tried it on my desktop, and same pattern on my system as Python 2.5.1: tempfile failed, and notempfile succeeded.

This is leading me to the conclusion that something's hosed on my Mac, so this isn't likely to be a problem that anyone else runs into ever.

Thanks VERY much to everyone (especially Alex Martelli) who helped on this!

0
ответ дан 10 December 2019 в 02:48
поделиться

I think your answer can be found here. You have to explicitly os.close() the file descriptor given as the first part of the tuple that mkstemp gives you.

Edit: no, the OP is already doing what is supposed to be done. I'm leaving the answer up for the nice link.

3
ответ дан 10 December 2019 в 02:48
поделиться

Как вы думаете, почему ошибка не подлинная? Вы запускаете 10000 потоков, каждый из которых открывает файл, в то время как максимальное количество открытых файлов обычно составляет 1024 в системах Unix.

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

1
ответ дан 10 December 2019 в 02:48
поделиться

Я не могу воспроизвести проблему с (собственной сборкой Apple) Python 2.5.1 в Mac OS X 10.5.9 - отлично работает до завершения!

Я пробовал как на Macbook Pro, то есть на процессоре Intel, так и на старом PowerMac, то есть на процессоре PPC.

Так что я могу только представить, что в 10.5.8 должна была быть ошибка, которую я никогда не замечал (нет любой 10.5.8 для тестирования, так как я всегда обновляюсь сразу же, когда это предлагает обновление программного обеспечения). Все, что я могу предложить, это попробовать обновиться до 10.5.9 и посмотреть, исчезнет ли ошибка - если нет, я понятия не имею, как такое различие в поведении между моими машинами и вашим возможно.

4
ответ дан 10 December 2019 в 02:48
поделиться

Я только что протестировал ваш код на своем компьютере с Ubuntu Linux здесь, и у меня это сработало отлично.

У меня есть одно предложение, которое вы можете попробовать. Не знаю, поможет, но не повредит. Перепишите свой код для использования с:

from __future__ import with_statement

def worker_tempfile():
    tempfd, tempfn = tempfile.mkstemp()
    with os.fdopen(tempfd, 'wb') as tempobj:
        tempobj.write('hello, world')
    os.remove(tempfn)
    time.sleep(10)

Предполагается, что оператор with гарантирует, что объект файла будет закрыт, несмотря ни на что. Может, это поможет?

Удачи. Между прочим, отличная работа над вопросом.

1
ответ дан 10 December 2019 в 02:48
поделиться
Другие вопросы по тегам:

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