Как запустить функцию для разных значений одновременно в python? - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь отслеживать 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 для каждого и каждого каталог

1 Ответ

0 голосов
/ 13 февраля 2020

В итоге я создал программы следующим образом:

  1. Для каждого нового каталога на FTP-сервере создайте файл python, который отслеживает новый каталог
  2. Для каждого удаленного каталога, удалить существующий файл python.
  3. Созданные / удаленные файлы python будут находиться в отдельной папке с именем 'Monitor_FTP_directory'
  4. A python Сценарий отслеживает каталог на предмет изменений файла, если приходит новый файл, то есть скрипт python, который контролирует каталог FTP, он запускает новый файл.

Это самый неэффективный способ сделать это, но это было быстрое решение .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...