Я пытаюсь отслеживать FTP-сервер.
На FTP-сервере есть несколько каталогов, и будет новый каталог без шаблона. Поэтому я опрашиваю FTP-сервер для эмуляции мониторинга, используя следующий код:
import config
import ftplib
import queue
from time import sleep
server = ftplib.FTP()
server.connect(config.ftp_server_address, config.ftp_server_port)
server.login(config.ftp_server_username,config.ftp_server_password)
def change_directory_monitor(dir='./'):
ls_prev = set()
while True:
ls = set(server.nlst(dir))
add, rem = ls-ls_prev, ls_prev-ls
if add or rem: yield add, rem
ls_prev = ls
sleep(5)
def change_file_monitor(directory):
ls_prev = set()
server.cwd(directory)
while True:
ls = set(server.nlst())
add, rem = ls-ls_prev, ls_prev-ls
if add or rem: yield add, rem
ls_prev = ls
sleep(5)
root_directory = list()
file_queue = queue.Queue()
for added_directory, removed_directory in change_directory_monitor():
for directory in added_directory:
root_directory.append(directory)
try:
for directory in removed_directory:
root_directory.remove(directory)
except:
pass
for directory in root_directory:
print(directory)
for added_file, removed_file in change_file_monitor(directory): #problem here
for file in added_file:
file_queue.put(file)
server.quit()
Когда программа выполняет строку, где комментарий «проблема здесь», она остается внутри для l oop и никогда не выходит потому что функция постоянно объединяет каталог FTP для изменений файлов.
Я хочу опросить весь каталог FTP на предмет изменений файлов, одновременно отслеживая каталог root на наличие дополнительных каталогов. Возможно ли использовать каталоги в функции root_directory
и change_file_monitor
в программе для параллельного запуска для мониторинга каталогов FTP?
Или мне нужно вручную запускать программу python для каждого и каждого каталог