我有一个脚本,在一个等待循环中使用100%的单核。脚本应该处理出现在预设目录中的文件。因此,它会等到文件出现,然后再处理它们。大致如下:
slept = 0
while True:
if len(glob.glob(src_diretory+suffix)) > 0:
slept=0
# cast black magic spells on files ending in suffix, located in src_directory
else:
print("Slept "+str(slept)+" times.."
slept+=1
sleep.sleep(1)
在这种情况下,相当频繁的len(glob.glob(src_diretory+suffix))
是否会导致如此高的CPU使用率?在
根据操作系统(*),您可以找到一些低级函数,这些函数允许程序在目录中创建新文件时得到警告,而无需执行活动循环。不幸的是,它是不可移植的,而且可能无法直接从Python获得。在
如果您正在构建一个高性能系统,您可以看看这个,否则,您应该使用一个简单的假脱机算法:
(*)至少存在于Windows和最新的Linux内核上
while循环将尝试尽可能多地占用多个cpu,比较:
处理此类问题的第一个工具是profiler,它将详细地告诉您时间花在哪里了。在
不需要测试长度是否大于零;如果列表中有条目,则为true,否则为false。此外,您可能应该在阅读条目时使用它们。不过,这些都是表面上的变化,所以我最好的猜测是glob本身需要很长时间;在同一个目录中是否有很多文件与模式不匹配?在
我建议采用稍微不同的结构:
理想情况下,您应该使用操作系统端监视器进行更改,例如inotify、kqueue、FSEvents或ReadDirectoryChanges,而不是轮询。您可能需要尝试执行此特定等待的程序,例如incron和entr。在
相关问题 更多 >
编程相关推荐