Я знаю, что есть некоторые другие фиды об этом, но ни один из них, который я нашел, не имеет моей проблемы:
У меня есть скрипт на python, который непрерывно сканирует каталоги X (сегодня 11) для поиска новогофайл, переносит его в другой каталог, где другой скрипт / программа анализирует / обрабатывает его.Либо для источника, либо для назначения может потребоваться соединение FTP / SFTP / SMB.Скрипт python является основным, который запускает X-процессы (с multiprocessing.Process
), поэтому каждый источник можно сканировать отдельно.
Моя проблема: иногда, без предупреждения и без остановки какого-либо процесса, некоторые исходные каталоги не отображаются.больше не сканируется (в нем есть файлы, но их нет в списке, поэтому они не принимаются).Иногда это FTP, иногда каталог Windows, к которому обращается samba, иногда SFTP.
Когда я перезапускаю сервис, он снова работает хорошо.
Есть идеи?
ТакжеPython не обязателен, мы можем полностью перейти на другие языки, но на данный момент у нас нет времени перестроить целое приложение.
edit :
connect = Libs.connection.Connection(self.config, server)
открывает соединение через FTP / SFP / SMB следующим образом:
def __init__(self, config, server):
self.config = config
self.extensions = config['supported']['extensions']
self.directories = config['directories']
self.local = ROOT_DIR + '/' + self.directories['app'] + '/' + self.directories['tmp']
self.source = server
self.env = self.source['environment']
self.ftp = ftplib.FTP()
source, dir = self.buildftp()
self.ftp.connect(source, self.source['port'])
self.ftp.login(self.source['login'], self.source['password'])
self.ftp.set_pasv(config['ftp']['passif'])
self.ftp.cwd(dir)
у каждого класса свой метод листинга
while True:
files = connect.listdir()
и, например, FTP.listdir
def listdir(self, dirftp = None):
lines, filesarr, folders = [], [], []
if dirftp is None:
self.ftp.dir(lines.append)
else:
self.ftp.dir(dirftp, lines.append)
for line in lines:
tmparr = line.split()
if tmparr[0][0] == 'd':
name = tmparr[-1]
if name != '.' and name != '..':
folders.append(name)
else:
name = tmparr[-1]
filename, fileextension = os.path.splitext(name)
if fileextension.lower() in self.extensions:
filesarr.append(name)
return filesarr
Я должен сказать, что у нас есть другой скрипт на python, использующий точно такой же метод для постоянного сканирования другого каталога FTP, и он никогда не завершится с ошибкой.
Спасибо