![]() |
|
negative memory usage - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: negative memory usage (/thread-42041.html) |
negative memory usage - akbarza - Apr-27-2024 hi in the below code, after running, the usage of memory is shown as a negative number! why? #from:https://blog.faradars.org/reduce-memory-usage-and-make-your-python-code-faster-using-generators/
'''generators'''
'''
problem to be solved: in a large list( for example 100,000,000) calculate the cube of even numbers.
'''
import memory_profiler
import time
#ordianary method:
def check_even_list(numbers):
even = []
for num in numbers:
if num % 2 == 0:
even.append(num*num)
return even
#using generator
def check_even_gene(numbers):
for num in numbers:
if num % 2 == 0:
yield num * num
if __name__ == '__main__':
n=100_000_000
#n=100
m1 = memory_profiler.memory_usage()
t1 = time.time()
cubes = check_even_list(range(n)) #ordinary method with using list
t2 = time.time()
m2 = memory_profiler.memory_usage() # breakpoint set here in this line
time_diff = t2 - t1
mem_diff = m2[0] - m1[0]
print(f"It took {time_diff} Secs and {mem_diff} Mb to execute this method with using list.")
m3 = memory_profiler.memory_usage()
t3 = time.time()
cubes = check_even_gene(range(n))
t4 = time.time()
m4 = memory_profiler.memory_usage()
time_diff = t4 - t3
mem_diff = m4[0] - m3[0]
print(f"It took {time_diff} Secs and {mem_diff} Mb to execute this method with using generator.")
my output in Thonny: if I change n to 100, the consumed time is zero as below, why?thanks for any reply
RE: negative memory usage - Gribouillis - Apr-27-2024 (Apr-27-2024, 07:41 AM)akbarza Wrote: the usage of memory is shown as a negative number! why?I think it is negative because the code deletes the previously calculated list cubes. You could correct this by runningdel cubes m3 = ...Another major problem with your code is that the call to check_even_gene() creates a generator but it does not actually calculate the data num * num, so it basically does nothing.Also note that num * num is not the cube of the number num.
|