在centos6.5上使用psutil的rlimit方法报如下错误
>>> import psutil
>>> p=psutil.Process()
>>> p.rlimit(psutil.RLIMIT_CPU)
Traceback (most recent call last):
File "" , line 1, in
AttributeError: 'Process' object has no attribute 'rlimit'
首先检查了psutil版本,是最新的4.1.0版本,rlimit函数应该已经包含在库中,所以排除了库版本太低的问题。
然后在{path_to_python}/site-packages/psutil/tests/test_linux.py文件中看到了一段描述很好的解释了这个问题,见下面代码片段
@unittest.skipUnless(
get_kernel_version() >= (2, 6, 36),
"prlimit() not available on this Linux kernel version")
def test_prlimit_availability(self):
# prlimit() should be available starting from kernel 2.6.36
p = psutil.Process(os.getpid())
p.rlimit(psutil.RLIMIT_NOFILE)
# if prlimit() is supported *at least* these constants should
# be available
说明,rlimit函数只在linux kernel 2.6.36及以上版本可用,所以果断查看系统kernel版本
$ uname -a
Linux fanbinlinux 2.6.32-573.22.1.el6.x86_64 #1 SMP Wed Mar 23 03:35:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
原来是2.6.32,好吧,命背,不过总算找到问题原因了。
呵呵,这是逗你玩的解决方案,很多情况用户不可能允许你升级内核,当然如果允许,这是最简单的解决办法。
查看python的官方文档,发现可以使用标准库resource的getrlimit和setrlimit方法实现,resource库和psutil库的区别就是resource库只能对当前进程设置或查询rlimit,而psutil可以针对任意进程。
下面是resource库的用法
import resource
resource.getrlimit(resource.RLIMIT_CPU)
resource.setrlimit(resource.RLIMIT_CPU, xxx)
参考 https://docs.python.org/2/library/resource.html
转载请以链接形式标明本文地址
本文地址:http://blog.csdn.net/kongxx/article/details/51189373