需要 python for 循环的替代方案,它每 5 分钟迭代一定数量的文件并执行一些操作



我的python程序在云上运行一次。 程序读取某个文件列表,每个文件都包含一个时间戳。 如果时间戳在当前 5 分钟内匹配,则程序将执行特定操作。

下面是一个示例:

我有一个目录"D:/files",其中包含 n 个文件。循环将像这样工作,

for one_file in files:
time_in_file=one_file["time"]
if time_in_file==within_next_five_minutes:
do_a_particular_action
else:
move_to_the_next_file

目前,我正在使用少量文件(大约 50 个(,这就是它工作正常的原因。 在未来,文件数量预计将达到数百或数千个,该过程将需要5分钟以上才能完成。 除了逐个迭代每个文件之外,还有没有更好的方法来优化它?

我建议创建 2 个不同的进程,一个用于加载文件,另一个用于处理每个文件。根据文件的外观,您可以按队列或分段发送文件。队列负责连接 2 个进程并在它们之间发送数据。

创建 2 个方法:load_files、process_file并为每个方法创建一个过程。第一种方法写入队列,第二种方法是从队列中读取。

队列对象应作为参数发送到参数中的每个方法,在参数中。

import multiprocessing as mp
....
queue = mp.Queue()
loader= mp.Process(target=load_files, args=(queue, ....))
processor = mp.Process(target=process_file, args=(queue, ....))
....
loader.start()
processor.start()
....
loader.join()
processor.join()

根据加载程序与处理器的速度,您可以选择等待第二个进程与第一个进程(例如:通过检查队列大小(: https://docs.python.org/2/library/multiprocessing.html#multiprocessing.Queue.qsize

qsize() # qsize() method can help. but please be aware it does now work on every 
# operating systems.

使用此方法,您可以启动多个进程来处理文件或将其放入队列。但是,如果您的负载高于单个进程可以执行的负载,则应找到一种简单的方法来平衡具有相同职责的进程。对于更高的负载,肯定有您可以使用的框架。如果您需要有关此类框架的建议,请告诉我。

干杯!

最新更新