如何在 python 中同时 运行 不同值的函数?

How to run a function for different values at the same time in python?

我正在尝试监控 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()

当程序执行注释 "problem here" 所在的行时,它停留在 for 循环内并且永远不会离开,因为该函数不断地汇集 FTP 目录以进行文件更改。

我想轮询所有 FTP 目录以查找文件更改,同时监视根目录以查找其他目录。 root_directory中的目录和change_file_monitor函数中的目录是否可以并行使用到运行来监控FTP目录?

或者我是否必须为每个目录手动 运行 一个 python 程序?

我最终创建了如下程序:

  1. 对于 FTP 服务器中的每个新目录,创建一个 python 文件来监视新目录
  2. 对于每个删除的目录,删除现有的 python 文件。
  3. created/deleted python 文件将位于名为 'Monitor_FTP_directory'
  4. 的单独文件夹中
  5. 一个python脚本监视目录的文件变化,如果有新文件进来,即监视FTP目录的python脚本,它运行新文件.

这是最没有效率的方法,但它是一个快速修复方法。