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

如何在python中同时为不同的值运行函数?,python,ftp,Python,Ftp,我正在尝试监视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_usern

我正在尝试监视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\u目录
change\u file\u monitor
功能中的目录并行运行以监视FTP目录


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

我最终创建了如下程序:

  • 对于FTP服务器中的每个新目录,创建一个监视新目录的python文件
  • 对于每个已删除的目录,删除现有的python文件
  • 创建/删除的python文件将位于名为“Monitor\u FTP\u directory”的单独文件夹中
  • python脚本监视目录中的文件更改,如果新文件(即监视FTP目录的python脚本)进入,它将运行新文件

  • 这是最低效的方法,但它是一个快速修复方法。

    您不必并行运行。只需在循环中按顺序监视每个文件夹。监视是一个连续的过程。例如,为了监视四个目录,我必须连续轮询第一个目录的更改。因此,它是一个永不结束的循环,从不经过第一个序列(监视第一个目录)。我怎么按顺序做呢@MartinPrikrylI的意思是,你得到投票目录1,然后2,然后3。。。然后回到1,我明白了。我当然可以这样做,但所花费的时间会随着新目录的创建而增加。我想模拟实时监控,所以线程是唯一的选择。