没有名为 mem_profile 的模块

新手上路,请多包涵

我正在使用这个程序来测量两个函数使用的时间和内存,并比较哪个更适合处理大量数据。我的理解是,要测量内存使用情况,我们需要 mem_profile 模块,但在 pip install mem_profile 期间它给了我错误 No module named mem_profile

 import mem_profile
import random
import time

names = ['Kiran','King','John','Corey']
majors = ['Math','Comps','Science']

print 'Memory (Before): {}Mb'.format(mem_profile.memory_usage_resource())

def people_list(num_people):
    results = []
    for i in num_people:
        person = {
                    'id':i,
                    'name': random.choice(names),
                    'major':random.choice(majors)
                  }
        results.append(person)
    return results

def people_generator(num_people):
    for i in xrange(num_people):
        person = {
                    'id':i,
                    'name': random.choice(names),
                    'major':random.choice(majors)
                  }
        yield person

t1 = time.clock()
people = people_list(10000000)
t2 = time.clock()

# t1 = time.clock()
# people = people_generator(10000000)
# t2 = time.clock()

print 'Memory (After): {}Mb'.format(mem_profile.memory_usage_resource())
print 'Took {} Seconds'.format(t2-t1)

是什么导致了这个错误?有没有我可以使用的替代包?

原文由 SaiKiran 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 988
2 个回答

用它来计算时间:

 import time

time_start = time.time()
#run your code
time_elapsed = (time.time() - time_start)

正如 Python 文档所引用的:

time.time() → float 返回自纪元以来的秒数作为浮点数。纪元的具体日期和闰秒的处理取决于平台。在 Windows 和大多数 Unix 系统上,纪元是 1970 年 1 月 1 日 00:00:00 (UTC),闰秒不计入自纪元以来的秒数。这通常称为 Unix 时间。要找出给定平台上的纪元是什么,请查看 gmtime(0)。

请注意,即使时间始终以浮点数形式返回,但并非所有系统都提供比 1 秒更精确的时间。虽然此函数通常返回非递减值,但如果系统时钟已在两次调用之间调回,则它可以返回比上一次调用更低的值。

time() 返回的数字可以通过将其传递给 gmtime() 函数或本地时间通过将其传递给 localtime( ) 功能。在这两种情况下,都会返回一个 struct_time 对象,从中可以将日历日期的组件作为属性访问。

参考https ://docs.python.org/3/library/time.html#time.time


用它来计算内存:

 import resource

resource.getrusage(resource.RUSAGE_SELF).ru_maxrss

参考http ://docs.python.org/library/resource.html

如果你使用 python 3.x,请使用它:

参考https ://docs.python.org/3/library/timeit.html

原文由 Devansh 发布,翻译遵循 CC BY-SA 4.0 许可协议

1)首先导入模块

pip install memory_profiler

2)像这样将其包含在您的代码中

import memory_profiler as mem_profile

3)更改代码

mem_profile.memory_usage_psutil()memory_usage()

4)像这样转换你的打印语句

print('Memory (Before): ' + str(mem_profile.memory_usage()) + 'MB' )
print('Memory (After) : ' + str(mem_profile.memory_usage()) + 'MB')
print ('Took ' + str(t2-t1) + ' Seconds')

5)你会有这样的代码:

 import memory_profiler as mem_profile
import random
import time

names = ['John', 'Corey', 'Adam', 'Steve', 'Rick', 'Thomas']
majors = ['Math', 'Engineering', 'CompSci', 'Arts', 'Business']

# print('Memory (Before): {}Mb '.format(mem_profile.memory_usage_psutil()))
print('Memory (Before): ' + str(mem_profile.memory_usage()) + 'MB' )

def people_list(num_people):
    result = []
    for i in range(num_people):
        person = {
                    'id': i,
                    'name': random.choice(names),
                    'major': random.choice(majors)
                }
        result.append(person)
    return result

def people_generator(num_people):
    for i in range(num_people):
        person = {
                    'id': i,
                    'name': random.choice(names),
                    'major': random.choice(majors)
                }
        yield person

# t1 = time.clock()
# people = people_list(1000000)
# t2 = time.clock()

t1 = time.clock()
people = people_generator(1000000)
t2 = time.clock()

# print 'Memory (After) : {}Mb'.format(mem_profile.memory_usage_psutil())
print('Memory (After) : ' + str(mem_profile.memory_usage()) + 'MB')

# print 'Took {} Seconds'.format(t2-t1)
print ('Took ' + str(t2-t1) + ' Seconds')

现在它可以很好地使用 python 3.6 并且它的工作没有任何错误。

原文由 H S Umer farooq 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题