Theo như thực hành tốt nhất, hãy để mắt đến các chức năng đệ quy. Trong trường hợp của tôi, tôi gặp vấn đề với đệ quy (nơi không cần phải có). Một ví dụ đơn giản về những gì tôi đã làm:
def my_function():
# lots of memory intensive operations
# like operating on images or huge dictionaries and lists
.....
my_flag = True
if my_flag: # restart the function if a certain flag is true
my_function()
def main():
my_function()
Hoạt động theo cách đệ quy này sẽ không kích hoạt bộ sưu tập rác và dọn sạch phần còn lại của chức năng, do đó, mỗi lần sử dụng bộ nhớ đều tăng và tăng.
Giải pháp của tôi là rút cuộc gọi đệ quy ra khỏi my_feft () và xử lý hàm main () khi gọi lại. bằng cách này, chức năng kết thúc một cách tự nhiên và làm sạch sau đó.
def my_function():
# lots of memory intensive operations
# like operating on images or huge dictionaries and lists
.....
my_flag = True
.....
return my_flag
def main():
result = my_function()
if result:
my_function()