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

问题描述 投票:-1回答:1

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

[当程序执行注释“问题在这里”的行时,它将停留在for循环中,并且永远不会离开,因为该函数会不断地将FTP目录池用于文件更改。

我想在监视所有目录的其他目录的同时,对所有FTP目录进行轮询。是否可以在程序的root_directorychange_file_monitor函数中使用目录并行运行以监视FTP目录?

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

python ftp
1个回答
0
投票

我最终创建了如下程序:

  1. 对于FTP服务器中的每个新目录,创建一个监视新目录的python文件
  2. 对于每个删除的目录,删除现有的python文件。
  3. 创建/删除的python文件将在一个单独的文件夹中,名称为'Monitor_FTP_directory'
  4. [python脚本监视目录中的文件更改,如果有新文件进入,即,监视ftp目录的python脚本,它将运行新文件。

这是最无效率的方法,但这是一种快速解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.