Hướng dẫn python clear memory after function - python xóa bộ nhớ sau chức năng

Tôi đã có một vấn đề tương tự trong việc đọc một biểu đồ từ một tệp. Việc xử lý bao gồm tính toán của ma trận float 200 000x200 000 [một dòng tại một thời điểm] không phù hợp với bộ nhớ. Cố gắng giải phóng bộ nhớ giữa các tính toán bằng cách sử dụng gc.collect[] đã sửa chữa khía cạnh liên quan đến bộ nhớ của vấn đề nhưng nó dẫn đến các vấn đề về hiệu suất: Tôi không biết tại sao nhưng mặc dù số lượng bộ nhớ được sử dụng không đổi, mỗi cuộc gọi mới đến gc.collect[] thời gian hơn cái trước. Vì vậy, khá nhanh chóng, việc thu thập rác mất phần lớn thời gian tính toán.

Để khắc phục cả vấn đề về bộ nhớ và hiệu suất, tôi đã chuyển sang sử dụng thủ thuật đa luồng mà tôi đọc một lần ở đâu đó [Tôi xin lỗi, tôi không thể tìm thấy bài đăng liên quan nữa]. Trước khi tôi đọc từng dòng của tệp trong một vòng lặp lớn, xử lý nó và chạy gc.collect[] mỗi lần để không gian bộ nhớ miễn phí. Bây giờ tôi gọi một hàm đọc và xử lý một đoạn của tệp trong một luồng mới. Khi chủ đề kết thúc, bộ nhớ được tự động giải phóng mà không có sự cố hiệu suất kỳ lạ.

Thực tế nó hoạt động như thế này:

from dask import delayed  # this module wraps the multithreading
def f[storage, index, chunk_size]:  # the processing function
    # read the chunk of size chunk_size starting at index in the file
    # process it using data in storage if needed
    # append data needed for further computations  to storage 
    return storage

partial_result = delayed[[]]  # put into the delayed[] the constructor for your data structure
# I personally use "delayed[nx.Graph[]]" since I am creating a networkx Graph
chunk_size = 100  # ideally you want this as big as possible while still enabling the computations to fit in memory
for index in range[0, len[file], chunk_size]:
    # we indicates to dask that we will want to apply f to the parameters partial_result, index, chunk_size
    partial_result = delayed[f][partial_result, index, chunk_size]

    # no computations are done yet !
    # dask will spawn a thread to run f[partial_result, index, chunk_size] once we call partial_result.compute[]
    # passing the previous "partial_result" variable in the parameters assures a chunk will only be processed after the previous one is done
    # it also allows you to use the results of the processing of the previous chunks in the file if needed

# this launches all the computations
result = partial_result.compute[]

# one thread is spawned for each "delayed" one at a time to compute its result
# dask then closes the tread, which solves the memory freeing issue
# the strange performance issue with gc.collect[] is also avoided

  1. Xóa bộ nhớ trong Python bằng phương pháp gc.collect[]
  2. Xóa bộ nhớ trong Python bằng cách sử dụng câu lệnh
    import numpy as np
    
    a= np.array[[1,2,3]]
    del a
    
    0

Cùng với phương thức gc.collect[], câu lệnh

import numpy as np

a= np.array[[1,2,3]]
del a
0 có thể khá hữu ích để xóa bộ nhớ trong quá trình thực hiện chương trình Python. Câu lệnh
import numpy as np

a= np.array[[1,2,3]]
del a
0 được sử dụng để xóa biến trong Python. Trước tiên chúng ta có thể xóa biến như một số danh sách lớn, hoặc mảng, v.v., về việc chúng tôi chắc chắn rằng không còn yêu cầu nữa bởi chương trình.

Để ngăn chặn chương trình hết bộ nhớ, chúng tôi phải miễn phí hoặc xóa bộ nhớ bằng cách xóa biến hoặc dữ liệu, điều này không cần thiết hơn trong chương trình. Chúng ta có thể xóa bộ nhớ trong Python bằng các phương thức sau.

Xóa bộ nhớ trong Python bằng phương pháp gc.collect[]

Phương pháp

import numpy as np

a= np.array[[1,2,3]]
del a
2 được sử dụng để xóa hoặc giải phóng bộ nhớ không được chấp thuận trong Python. Bộ nhớ không được cải tiến là bộ nhớ không thể truy cập và không thể được sử dụng. Đối số tùy chọn
import numpy as np

a= np.array[[1,2,3]]
del a
3 là một số nguyên có giá trị dao động từ
import numpy as np

a= np.array[[1,2,3]]
del a
4 đến
import numpy as np

a= np.array[[1,2,3]]
del a
5. Nó chỉ định tạo các đối tượng để thu thập bằng phương pháp gc.collect[].

Trong Python, các vật thể tồn tại trong thời gian ngắn được lưu trữ trong thế hệ

import numpy as np

a= np.array[[1,2,3]]
del a
4 và các đối tượng có tuổi thọ dài hơn được lưu trữ trong thế hệ
import numpy as np

a= np.array[[1,2,3]]
del a
8 hoặc
import numpy as np

a= np.array[[1,2,3]]
del a
5. Danh sách được duy trì bởi bộ thu rác được xóa bất cứ khi nào gc.collect[] với giá trị
import numpy as np

a= np.array[[1,2,3]]
del a
3 mặc định bằng
import numpy as np

a= np.array[[1,2,3]]
del a
5 được gọi.

Phương pháp gc.collect[] có thể giúp giảm việc sử dụng bộ nhớ và xóa bộ nhớ không được giới thiệu trong quá trình thực hiện chương trình. Nó có thể ngăn chặn chương trình hết bộ nhớ và bị sập bằng cách xóa bộ nhớ không thể truy cập dữ liệu.

Xóa bộ nhớ trong Python bằng cách sử dụng câu lệnh
import numpy as np

a= np.array[[1,2,3]]
del a
0

Cùng với phương thức gc.collect[], câu lệnh

import numpy as np

a= np.array[[1,2,3]]
del a
0 có thể khá hữu ích để xóa bộ nhớ trong quá trình thực hiện chương trình Python. Câu lệnh
import numpy as np

a= np.array[[1,2,3]]
del a
0 được sử dụng để xóa biến trong Python. Trước tiên chúng ta có thể xóa biến như một số danh sách lớn, hoặc mảng, v.v., về việc chúng tôi chắc chắn rằng không còn yêu cầu nữa bởi chương trình.

Mã ví dụ dưới đây trình bày cách sử dụng câu lệnh

import numpy as np

a= np.array[[1,2,3]]
del a
0 để xóa biến.

import numpy as np

a= np.array[[1,2,3]]
del a

Giả sử chúng ta cố gắng sử dụng hoặc truy cập biến sau khi xóa nó. Trong trường hợp đó, chương trình sẽ trả về ngoại lệ

import numpy as np

a= np.array[[1,2,3]]
del a
print[a]
9 vì biến chúng tôi đang cố gắng truy cập không còn tồn tại trong không gian tên biến.

Mã ví dụ:

import numpy as np

a= np.array[[1,2,3]]
del a
print[a]

Output:

NameError: name 'a' is not defined

Câu lệnh

import numpy as np

a= np.array[[1,2,3]]
del a
0 loại bỏ biến khỏi không gian tên, nhưng nó không nhất thiết phải xóa nó khỏi bộ nhớ. Do đó, sau khi xóa biến bằng câu lệnh
import numpy as np

a= np.array[[1,2,3]]
del a
0, chúng ta có thể sử dụng phương thức gc.collect[] để xóa biến khỏi bộ nhớ.

Mã ví dụ dưới đây trình bày cách sử dụng câu lệnh

import numpy as np

a= np.array[[1,2,3]]
del a
0 với phương thức gc.collect[] để xóa bộ nhớ trong Python.

import numpy as np
import gc

a = np.array[[1,2,3]]
del a
gc.collect[]

Bài Viết Liên Quan

Chủ Đề