如何在 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 程序?
我最终创建了如下程序:
- 对于 FTP 服务器中的每个新目录,创建一个 python 文件来监视新目录
- 对于每个删除的目录,删除现有的 python 文件。
- created/deleted python 文件将位于名为 'Monitor_FTP_directory'
的单独文件夹中
- 一个python脚本监视目录的文件变化,如果有新文件进来,即监视FTP目录的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 程序?
我最终创建了如下程序:
- 对于 FTP 服务器中的每个新目录,创建一个 python 文件来监视新目录
- 对于每个删除的目录,删除现有的 python 文件。
- created/deleted python 文件将位于名为 'Monitor_FTP_directory' 的单独文件夹中
- 一个python脚本监视目录的文件变化,如果有新文件进来,即监视FTP目录的python脚本,它运行新文件.
这是最没有效率的方法,但它是一个快速修复方法。