如何在python中同时为不同的值运行函数?
我正在尝试监视FTP服务器 FTP服务器有多个目录,将有没有模式的新目录。因此,我使用以下代码轮询FTP服务器以模拟监视如何在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
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程序吗?我最终创建了如下程序:
这是最低效的方法,但它是一个快速修复方法。您不必并行运行。只需在循环中按顺序监视每个文件夹。监视是一个连续的过程。例如,为了监视四个目录,我必须连续轮询第一个目录的更改。因此,它是一个永不结束的循环,从不经过第一个序列(监视第一个目录)。我怎么按顺序做呢@MartinPrikrylI的意思是,你得到投票目录1,然后2,然后3。。。然后回到1,我明白了。我当然可以这样做,但所花费的时间会随着新目录的创建而增加。我想模拟实时监控,所以线程是唯一的选择。