我用来incrond
监视传入文件的目录。每个文件到达目录后,都会调用 python 脚本来处理它。
当文件传入速度快于文件处理速度时,就会出现问题。在这种情况下,系统会不堪重负,结果也难以预料。
incrond
有没有办法设置允许启动的最大进程数?是否可以使用其他工具对文件的处理进行排队,以便以受控的方式处理它们?
答案1
您不应incrond
启动超出并行运行意义的处理进程,例如,由 CPU 或内存的数量决定。这是下文中提到的数字 N。
处理进程只能由“in”目录中的文件启动incrond
,并继续处理“in”目录中的文件,直到没有任何内容为止。如果多个进程运行,则需要进行一些协调,以便两个进程不会尝试处理同一任务。
如果 python 脚本只能使用一个文件作为参数运行,请incrond
启动一个包装器脚本,只要有新文件要处理,该脚本就会继续生成原始 python 脚本,否则它会存在。icrond
如果同时运行的数量少于 N 个,则启动此包装器脚本。只要文件的传入速率较高,包装器脚本就会继续处理,但它们不会错过任何内容,也不会因为运行太多并行脚本而不必要地减慢系统速度。一旦传入速率低于处理速率,仍然需要处理的文件数量将减少到最终为零,并且所有包装器脚本都会退出。
如果没有简单的方法来区分刚刚到达的文件和已处理的文件,则可以incrond
在目录中写出一些待办任务文件,待办文件从中处理。
答案2
只需使用任务后台处理程序发送 python 脚本命令,它们就会排队并按顺序处理。 https://www.ostechnix.com/add-linux-commands-queue-execute-one-one/