diff --git a/scrapy/contrib/memusage.py b/scrapy/contrib/memusage.py index 3860ef52d..e3e051ab5 100644 --- a/scrapy/contrib/memusage.py +++ b/scrapy/contrib/memusage.py @@ -4,7 +4,6 @@ MemoryUsage extension See documentation in docs/topics/extensions.rst """ -import os import socket from pprint import pformat @@ -18,7 +17,7 @@ from scrapy.exceptions import NotConfigured from scrapy.mail import MailSender from scrapy.conf import settings from scrapy.stats import stats -from scrapy.utils.memory import get_vmvalue_from_procfs +from scrapy.utils.memory import get_vmvalue_from_procfs, procfs_supported from scrapy.utils.engine import get_engine_status class MemoryUsage(object): @@ -26,7 +25,7 @@ class MemoryUsage(object): def __init__(self): if not settings.getbool('MEMUSAGE_ENABLED'): raise NotConfigured - if not os.path.exists('/proc'): + if not procfs_supported(): raise NotConfigured self.warned = False diff --git a/scrapy/tests/test_utils_memory.py b/scrapy/tests/test_utils_memory.py index 028bff15f..c5557d573 100644 --- a/scrapy/tests/test_utils_memory.py +++ b/scrapy/tests/test_utils_memory.py @@ -1,13 +1,11 @@ -import os - from twisted.trial import unittest -from scrapy.utils.memory import get_vmvalue_from_procfs +from scrapy.utils.memory import get_vmvalue_from_procfs, procfs_supported class UtilsMemoryTestCase(unittest.TestCase): def test_get_vmvalue_from_procfs(self): - if not os.path.exists('/proc'): + if not procfs_supported(): raise unittest.SkipTest('/proc filesystem not supported') vmsize = get_vmvalue_from_procfs('VmSize') vmrss = get_vmvalue_from_procfs('VmRSS') diff --git a/scrapy/utils/memory.py b/scrapy/utils/memory.py index 4e610c54e..f2c9a966d 100644 --- a/scrapy/utils/memory.py +++ b/scrapy/utils/memory.py @@ -23,3 +23,10 @@ def get_vmvalue_from_procfs(vmkey='VmSize', pid=None): # convert Vm value to bytes return int(v[1]) * _vmvalue_scale[v[2]] +def procfs_supported(): + try: + open('/proc/%d/status' % os.getpid()) + except IOError: + return False + else: + return True