Приведенный ниже код используется для синхронизации загруженного изображения с другим местом. это работает, но через некоторое время (около 10 дней) служба становится непригодной для использования, отображается ошибка: «дескриптор файла вне диапазона в select()», но перезапуск службы решает проблему.
File "/path/to/sync.py", line 25, in sync_file
stdout_value, stderr_value = proc.communicate()
File "/usr/lib/python2.6/subprocess.py", line 691, in communicate
return self._communicate(input)
File "/usr/lib/python2.6/subprocess.py", line 1211, in _communicate
rlist, wlist, xlist = select.select(read_set, write_set, [])
ValueError: filedescriptor out of range in select()
есть ли незакрытые дескрипторы файлов, вызывающие ошибку? кажется, что подпроцесс не закрывает дескриптор файла, поэтому, когда он запускается 1024 раза, дескриптор файла выходит за пределы допустимого диапазона. (мы используем Python 2.6, подпроцесс вынужден использовать select.select(), который имеет ограничение в 1024 файловых дескриптора, даже доступен epoll)
Приведенный ниже код используется для синхронизации загруженного изображения с другим местом. это работает, но через некоторое время (около 10 дней) служба становится непригодной для использования, отображается ошибка: «дескриптор файла вне диапазона в select()», но перезапуск службы решает проблему. [code]# sync.py
def sync_file(source_pic, hashval, retry_num=3):
pic_path = os.path.join(gen_dir(hashval), os.path.split(source_pic)[1]) filename = tempfile.mkstemp()[1] with open(filename, 'w') as f: f.write(pic_path)
for sync_path in options.sync_paths: try_num = 0 rsync_cmd = ['rsync','-au', '--files-from='+filename, options.pic_path, sync_path]
[code]File "/path/to/sync.py", line 25, in sync_file stdout_value, stderr_value = proc.communicate() File "/usr/lib/python2.6/subprocess.py", line 691, in communicate return self._communicate(input) File "/usr/lib/python2.6/subprocess.py", line 1211, in _communicate rlist, wlist, xlist = select.select(read_set, write_set, []) ValueError: filedescriptor out of range in select() [/code]
есть ли незакрытые дескрипторы файлов, вызывающие ошибку? кажется, что подпроцесс не закрывает дескриптор файла, поэтому, когда он запускается 1024 раза, дескриптор файла выходит за пределы допустимого диапазона. (мы используем Python 2.6, подпроцесс вынужден использовать select.select(), который имеет ограничение в 1024 файловых дескриптора, даже доступен epoll)
Я использую научное программное обеспечение, включая сценарий Python, вызывающий os.system(), который используется для запуска другой научной программы. Во время выполнения подпроцесса Python в какой-то момент печатает следующее:
Я пытаюсь разветвить несколько дочерних процессов на C и хочу, чтобы все они использовали один и тот же файловый дескриптор.
Насколько я понимаю, каждый дочерний процесс получает копия дескрипторов родительских файлов. Но когда дескриптор файла...