Python постоянно сканирует каталог - PullRequest
0 голосов
/ 24 мая 2018

Я знаю, что есть некоторые другие фиды об этом, но ни один из них, который я нашел, не имеет моей проблемы:

У меня есть скрипт на 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, и он никогда не завершится с ошибкой.

Спасибо

...