Hướng dẫn how to implement buffer in python - cách triển khai bộ đệm trong python

Một số đối tượng có sẵn trong Python Wrap Access vào một mảng bộ nhớ hoặc bộ đệm bên dưới. Các đối tượng như vậy bao gồm tích hợp bytesbytearray và một số loại mở rộng như array.array. Các thư viện của bên thứ ba có thể xác định các loại của riêng họ cho các mục đích đặc biệt, chẳng hạn như xử lý hình ảnh hoặc phân tích số.

Mặc dù mỗi loại này có ngữ nghĩa riêng, nhưng chúng chia sẻ đặc điểm chung được hỗ trợ bởi bộ đệm bộ nhớ lớn có thể. Sau đó, nó là mong muốn, trong một số tình huống, để truy cập vào bộ đệm đó trực tiếp và không có sao chép trung gian.

Python cung cấp một cơ sở như vậy ở cấp C dưới dạng giao thức đệm. Giao thức này có hai mặt:buffer protocol. This protocol has two sides:

  • Về phía nhà sản xuất, một loại có thể xuất một giao diện bộ đệm trên mạng cho phép các đối tượng thuộc loại đó để lộ thông tin về bộ đệm cơ bản của chúng. Giao diện này được mô tả trong các cấu trúc đối tượng bộ đệm phần;Buffer Object Structures;

  • Về phía người tiêu dùng, một số phương tiện có sẵn để có được một con trỏ đến dữ liệu cơ bản thô của một đối tượng [ví dụ như tham số phương thức].

Các đối tượng đơn giản như bytesbytearray hiển thị bộ đệm cơ bản của chúng ở dạng định hướng byte. Các hình thức khác là có thể; Ví dụ, các yếu tố được hiển thị bởi một array.array có thể là các giá trị đa byte.

Một ví dụ Người tiêu dùng của giao diện bộ đệm là phương thức write[] của các đối tượng tệp: Bất kỳ đối tượng nào có thể xuất một loạt byte thông qua giao diện bộ đệm đều có thể được ghi vào một tệp. Mặc dù write[] chỉ cần truy cập chỉ đọc vào nội dung bên trong của đối tượng được truyền cho nó, các phương pháp khác như

def verify_structure[memlen, itemsize, ndim, shape, strides, offset]:
    """Verify that the parameters represent a valid array within
       the bounds of the allocated memory:
           char *mem: start of the physical memory block
           memlen: length of the physical memory block
           offset: [char *]buf - mem
    """
    if offset % itemsize:
        return False
    if offset  memlen:
        return False
    if any[v % itemsize for v in strides]:
        return False

    if ndim 

Bài Viết Liên Quan

Chủ Đề