我正在开发一个项目,用于为我的其他项目开发分布式计算模型。我的一个脚本是多处理的,监视目录中的更改,解码pickle,根据它们前往的节点为它们创建身份验证密钥,并重新排序它们。 (编辑:这些进程都以循环方式运行。)
我的问题是,在查看OSX中的活动监视器时,我的%CPU列显示100%用于运行脚本的主进程。显示100%的这三个是管理器脚本和两个节点(我在一台机器上模拟模型,目的是将模型移动到未来的实时集群网络)。这 不好 吗?我的系统使用率显示为27.50%,用户为12.50%,空闲率为65%。
我首先尝试自己研究,我唯一想到的是这些数字表明这个过程在它活着的整个过程中都在利用CPU,而且从不闲着。
我能澄清一下吗?
根据评论进行更新 我的进程在无限循环中运行,监视各自目录中文件的更改,以便从管理器进程/脚本(项目最终实现中的集群中的单独计算机)接收新的“作业”。也许有更好的方法可以在这种形式下等待I / O而不需要那么多的处理器时间?
答案 0 :(得分:0)
解决方案(如果不是次优):
在每个循环结束时实现time.sleep(n)
个句点0.1
秒。使CPU时间降至不超过0.4%。
尽管如此,我正在寻找一种更优化的方法来减少CPU时间,而不使用Python标准库中未包含的模块,我希望避免使用time.sleep(n)
期,因为我想要系统能够随时响应,如果输入文件的负载变得非常高,我不希望它浪费时间睡觉,当它可以处理文件时。
我的进程通过忙等待运行,因此导致它们占用过多的CPU时间:
while True:
files = os.path.listdir('./sub_directory/')
if files != []:
do_something()
这是我正在执行的每个脚本/进程的基础。