Глядя на ваш предыдущий вопрос (который вы указали в комментарии), проблема в том, что у вас заканчиваются файловые дескрипторы .
Из official doc :
Файловые дескрипторы - это маленькие целые числа, соответствующие файлу, который был открыт текущим процессом.Например, стандартный ввод - это обычно дескриптор файла 0, стандартный вывод - 1, а стандартная ошибка - 2. Далее файлам, открываемым процессом, будут назначены 3, 4, 5 и т. Д.Название «дескриптор файла» слегка обманчиво;на платформах Unix сокеты и каналы также упоминаются дескрипторами файлов.
Теперь я догадываюсь, но возможно, вы делаете что-то вроде:
class Wroker(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
my_file = open('example.txt')
# operations
my_file.close() # without this line!
Вам нужно закрыть свои файлы!
Вы, вероятно, запускаете много потоков, и каждый из них открывает, но не закрывает файл, так что через некоторое время у вас не будет больше «маленьких целых чисел», которые можно назначитьдля открытия нового файла.
Также обратите внимание, что в части #operations
может произойти все что угодно, если возникнет исключение, файл не будет закрыт, если не заключен в оператор try/finally
.
Есть лучший способ работы с файлами: оператор with
:
with open('example.txt') as my_file:
# bunch of operations with the file
# other operations for which you don't need the file