Theo như thực tiễn tốt nhất, hãy theo dõi các hàm đệ quy. Trong trường hợp của tôi, tôi gặp phải 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 đang 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 thu gom rác thải và dọn dẹp các phần còn lại của các chức năng, như vậy mỗi lần thông qua việc sử dụng bộ nhớ đang tăng trưởng và phát triển.
Giải pháp của tôi là kéo cuộc gọi đệ quy ra khỏi hàm my_function() và xử lý chính() khi gọi lại. theo cách này, hàm sẽ tự động kết thúc và tự dọn dẹp.
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()
Tôi đã tìm thấy [công thức này] (http://code.activestate.com/recipes/65333/) hữu ích. –
Dường như in ra quá nhiều dữ liệu để hữu ích – Casebash
@Casebash: Nếu chức năng đó in bất cứ điều gì bạn nghiêm túc làm sai. Nó liệt kê các đối tượng với phương thức '__del__' không còn được tham chiếu trừ chu kỳ của chúng. Chu kỳ không thể bị hỏng, vì các vấn đề với '__del__'. Sửa nó! –