Khởi tạo trong python là gì?

Các chức năng sau không nên được gọi trước PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92. PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 6, PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 7, PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 8, PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 9, Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 0, Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 1, Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 2 và Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 3

Biến cấu hình toàn cục¶

Python có các biến cho cấu hình chung để kiểm soát các tính năng và tùy chọn khác nhau. Theo mặc định, các cờ này được kiểm soát bởi tùy chọn dòng lệnh .

Khi một tùy chọn đặt cờ, giá trị của cờ là số lần tùy chọn đó được đặt. Ví dụ: Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 4 đặt Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 5 thành 1 và Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 6 đặt Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 5 thành 2

int Py_BytesWarningFlag

Đưa ra cảnh báo khi so sánh Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 8 hoặc Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 9 với PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 40 hoặc Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 8 với PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 42. Đưa ra lỗi nếu lớn hơn hoặc bằng PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 43.

Đặt theo tùy chọn Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 4

int Py_DebugFlag

Bật đầu ra gỡ lỗi trình phân tích cú pháp (chỉ dành cho chuyên gia, tùy thuộc vào các tùy chọn biên dịch).

Được đặt bởi tùy chọn PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 45 và biến môi trường PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 46

int Py_DontWriteBytecodeFlag

Nếu được đặt thành khác 0, Python sẽ không cố ghi PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 47 .

Được đặt bởi tùy chọn PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 48 và biến môi trường PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 49

int Py_FrozenFlag

Chặn thông báo lỗi khi tính toán đường dẫn tìm kiếm mô-đun trong PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 7.

Cờ riêng được sử dụng bởi các chương trình PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 51 và PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 52

int Py_HashRandomizationFlag

Đặt thành PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 53 nếu biến môi trường PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 54 được đặt thành không trống .

Nếu cờ khác không, hãy đọc biến môi trường PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 54 để khởi tạo hạt băm bí mật

int Py_IgnoreEnvironmentFlag

Bỏ qua tất cả các biến môi trường PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 56, e. g. PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 57 và PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 58, có thể được đặt.

Được đặt bởi các tùy chọn PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 59 và PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 40

int Py_InspectFlag

Khi tập lệnh được chuyển làm đối số đầu tiên hoặc tùy chọn PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 41 được sử dụng, .

Được đặt bởi tùy chọn PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 43 và biến môi trường PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 44

int Py_InteractiveFlag

Đặt bởi tùy chọn PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 43.

int Py_IsolatedFlag

Chạy Python ở chế độ biệt lập. Ở chế độ biệt lập, PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 46 không chứa thư mục của tập lệnh cũng như thư mục gói trang web của người dùng.

Đặt theo tùy chọn PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 40

Mới trong phiên bản 3. 4

int Py_LegacyWindowsFSEncodingFlag

Nếu cờ khác 0, hãy sử dụng mã hóa PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 48 với lỗi PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 49 . filesystem encoding and error handler.

Đặt thành PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 53 nếu biến môi trường PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 922 được đặt thành chuỗi không trống

Xem PEP 529 để biết thêm chi tiết

Tính khả dụng . các cửa sổ.

int Py_LegacyWindowsStdioFlag

Nếu cờ khác 0, hãy sử dụng PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 923 thay vì PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 924 cho PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 925 .

Đặt thành PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 53 nếu biến môi trường PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 927 được đặt thành chuỗi không trống

Xem PEP 528 để biết thêm chi tiết

Tính khả dụng . các cửa sổ.

int Py_NoSiteFlag

Vô hiệu hóa việc nhập mô-đun PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 928 và các thao tác phụ thuộc vào trang web của PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 46 . Đồng thời vô hiệu hóa các thao tác này nếu sau đó PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 928 được nhập rõ ràng (gọi Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 011 nếu bạn muốn chúng được kích hoạt).

Đặt theo tùy chọn Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 012

int Py_NoUserSiteDirectory

Không thêm Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 013 vào PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 46.

Được đặt bởi các tùy chọn Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 015 và PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 40 và biến môi trường Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 017

int Py_OptimizeFlag

Đặt theo tùy chọn Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 018 và biến môi trường Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 019.

int Py_QuietFlag

Không hiển thị thông báo bản quyền và phiên bản ngay cả trong chế độ tương tác.

Đặt theo tùy chọn Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 900

Mới trong phiên bản 3. 2

int Py_UnbufferedStdioFlag

Buộc các luồng thiết bị xuất chuẩn và thiết bị xuất chuẩn không được lưu vào bộ đệm.

Được đặt bởi tùy chọn Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 901 và biến môi trường Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 902

int Py_VerboseFlag

In thông báo mỗi khi mô-đun được khởi tạo, hiển thị vị trí (tên tệp . Nếu lớn hơn hoặc bằng PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 43, hãy in thông báo cho từng tệp được chọn khi tìm kiếm mô-đun. Cũng cung cấp thông tin về dọn dẹp mô-đun khi thoát.

Được đặt bởi tùy chọn Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 904 và biến môi trường Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 905

Khởi tạo và hoàn thiện trình thông dịch¶

void Py_Initialize()
Part of the Stable ABI.

Khởi tạo trình thông dịch Python. Trong ứng dụng nhúng Python, hàm này nên được gọi trước khi sử dụng bất kỳ hàm API Python/C nào khác; . Before Python Initialization for the few exceptions.

Thao tác này khởi tạo bảng các mô-đun đã tải (Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 906) và tạo các mô-đun cơ bản Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 907, Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 908 và PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 925. Nó cũng khởi tạo đường dẫn tìm kiếm mô-đun (PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 46). Nó không đặt Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 911; . Đây là lỗi không hoạt động khi được gọi lần thứ hai (không gọi Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 913 trước). Không có giá trị quay lại;

Ghi chú

Trên Windows, thay đổi chế độ bảng điều khiển từ ________ 4914 thành ________ 4915, điều này cũng sẽ ảnh hưởng đến việc sử dụng bảng điều khiển không phải Python bằng C Runtime

void Py_InitializeEx(int initsigs)
Part of the Stable ABI.

Chức năng này hoạt động như PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92 nếu initsigs là PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 53. Nếu initsigs là Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 918, nó sẽ bỏ qua đăng ký khởi tạo của bộ xử lý tín hiệu, điều này có thể hữu ích khi Python được nhúng

int Py_IsInitialized()
Part of the Stable ABI.

Trả về true (khác 0) khi trình thông dịch Python đã được khởi tạo, sai (không) nếu không. Sau khi Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 913 được gọi, điều này trả về false cho đến khi PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92 được gọi lại

int Py_FinalizeEx()
Part of the Stable ABI since version 3.6.

Hoàn tác tất cả các lần khởi tạo được thực hiện bởi PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92 và việc sử dụng các hàm API Python/C sau đó, đồng thời hủy tất cả các trình thông dịch phụ (xem Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 922 bên dưới) đã được tạo và chưa bị hủy kể từ lần gọi cuối cùng tới PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92. Lý tưởng nhất là điều này giải phóng tất cả bộ nhớ được cấp phát bởi trình thông dịch Python. Đây là lỗi không hoạt động khi được gọi lần thứ hai (không gọi lại PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92 trước). Thông thường giá trị trả về là Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 918. Nếu có lỗi trong quá trình hoàn thiện (xóa dữ liệu được lưu vào bộ đệm), thì _____4926 được trả về

Chức năng này được cung cấp vì một số lý do. Một ứng dụng nhúng có thể muốn khởi động lại Python mà không phải tự khởi động lại ứng dụng. Ứng dụng đã tải trình thông dịch Python từ thư viện có thể tải động (hoặc DLL) có thể muốn giải phóng tất cả bộ nhớ do Python cấp phát trước khi dỡ DLL. Trong quá trình tìm kiếm rò rỉ bộ nhớ trong ứng dụng, nhà phát triển có thể muốn giải phóng tất cả bộ nhớ do Python cấp phát trước khi thoát khỏi ứng dụng

Lỗi và lưu ý. Việc hủy các mô-đun và đối tượng trong mô-đun được thực hiện theo thứ tự ngẫu nhiên; . Các mô-đun mở rộng được tải động do Python tải không được tải. Một lượng nhỏ bộ nhớ được cấp phát bởi trình thông dịch Python có thể không được giải phóng (nếu bạn phát hiện rò rỉ, vui lòng báo cáo). Bộ nhớ bị ràng buộc trong các tham chiếu vòng tròn giữa các đối tượng không được giải phóng. Một số bộ nhớ được phân bổ bởi các mô-đun mở rộng có thể không được giải phóng. Một số phần mở rộng có thể không hoạt động bình thường nếu quy trình khởi tạo của chúng được gọi nhiều lần;

Tăng sự kiện kiểm tra Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 930 mà không có đối số.

Mới trong phiên bản 3. 6

void Py_Finalize()
Part of the Stable ABI.

Đây là phiên bản tương thích ngược của Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 913 bỏ qua giá trị trả về

Thông số toàn quy trình¶

int Py_SetStandardStreamEncoding(const char *encoding, const char *errors)

This API is kept for backward compatibility: setting Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 932 and Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 933 should be used instead, see Cấu hình khởi tạo Python .

Hàm này nên được gọi trước PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92, nếu nó hoàn toàn được gọi. Nó chỉ định sử dụng mã hóa và xử lý lỗi nào với IO tiêu chuẩn, với ý nghĩa tương tự như trong Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 935

Nó ghi đè các giá trị Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 936 và cho phép nhúng mã để kiểm soát mã hóa IO khi biến môi trường không hoạt động

mã hóa và/hoặc lỗi có thể là Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937 để sử dụng Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 936 và/hoặc giá trị mặc định (tùy thuộc vào các cài đặt khác)

Lưu ý rằng Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 939 luôn sử dụng trình xử lý lỗi "backslashreplace", bất kể cài đặt này (hoặc bất kỳ cài đặt nào khác)

Nếu Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 913 được gọi, chức năng này sẽ cần được gọi lại để ảnh hưởng đến các cuộc gọi tiếp theo tới PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92

Trả về Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 918 nếu thành công, một giá trị khác không do lỗi (e. g. gọi sau khi trình thông dịch đã được khởi tạo)

Mới trong phiên bản 3. 4

Không dùng nữa kể từ phiên bản 3. 11

void Py_SetProgramName(const wchar_t *name)
Part of the Stable ABI.

API này được lưu giữ để tương thích ngược. Thay vào đó, nên sử dụng cài đặt Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 943, xem Cấu hình khởi tạo Python .

Hàm này nên được gọi trước khi PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92 được gọi lần đầu tiên, nếu nó hoàn toàn được gọi. Nó cho trình thông dịch biết giá trị của đối số Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 945 đối với hàm Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 946 của chương trình (được chuyển đổi thành ký tự rộng). Điều này được sử dụng bởi PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 7 và một số chức năng khác bên dưới để tìm các thư viện thời gian chạy Python liên quan đến trình thông dịch thực thi. Giá trị mặc định là Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 948. Đối số phải trỏ đến một chuỗi ký tự rộng không kết thúc trong bộ lưu trữ tĩnh có nội dung sẽ không thay đổi trong suốt thời gian thực hiện chương trình. Không có mã nào trong trình thông dịch Python sẽ thay đổi nội dung của kho lưu trữ này

Sử dụng PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 0 để giải mã chuỗi byte để nhận được chuỗi wchar_* .

Không dùng nữa kể từ phiên bản 3. 11

wchar *Py_GetProgramName()
Part of the Stable ABI.

Trả lại tên chương trình được đặt bằng Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 96 hoặc mặc định. Chuỗi trả về trỏ vào bộ lưu trữ tĩnh;

Hàm này không nên được gọi trước PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92, nếu không nó sẽ trả về Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937

Đã thay đổi trong phiên bản 3. 10. Bây giờ nó trả về Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937 nếu được gọi trước PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92.

wchar_t *Py_GetPrefix()
Part of the Stable ABI.

Trả lại tiền tố cho các tệp độc lập với nền tảng đã cài đặt. Điều này bắt nguồn từ một số quy tắc phức tạp từ tên chương trình được đặt bằng Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 96 và một số biến môi trường; . Chuỗi trả về trỏ vào bộ lưu trữ tĩnh; . Điều này tương ứng với biến tiền tố ở cấp cao nhất Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 958 và đối số Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 959 cho tập lệnh cấu hình tại thời điểm xây dựng. Giá trị có sẵn cho mã Python là Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 960. Nó chỉ hữu ích trên Unix. Xem thêm chức năng tiếp theo

Hàm này không nên được gọi trước PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92, nếu không nó sẽ trả về Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937

Đã thay đổi trong phiên bản 3. 10. Bây giờ nó trả về Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937 nếu được gọi trước PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92.

wchar_t *Py_GetExecPrefix()
Part of the Stable ABI.

Trả lại tiền tố thực thi cho các tệp phụ thuộc vào nền tảng đã cài đặt. Điều này bắt nguồn từ một số quy tắc phức tạp từ tên chương trình được đặt bằng Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 96 và một số biến môi trường; . Chuỗi trả về trỏ vào bộ lưu trữ tĩnh; . Điều này tương ứng với biến exec_prefix ở cấp cao nhất Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 958 và đối số Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 969 cho tập lệnh cấu hình tại thời điểm xây dựng. Giá trị có sẵn cho mã Python là Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 970. Nó chỉ hữu ích trên Unix

Tiểu sử. Tiền tố thực thi khác với tiền tố khi các tệp phụ thuộc vào nền tảng (chẳng hạn như tệp thực thi và thư viện dùng chung) được cài đặt trong một cây thư mục khác. Trong cài đặt điển hình, các tệp phụ thuộc nền tảng có thể được cài đặt trong cây con Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 971 trong khi nền tảng độc lập có thể được cài đặt trong Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 972

Nói chung, một nền tảng là sự kết hợp của họ phần cứng và phần mềm, ví dụ:. g. Máy Sparc chạy Solaris 2. x được coi là cùng một nền tảng, nhưng các máy Intel chạy Solaris 2. x là một nền tảng khác và các máy Intel chạy Linux là một nền tảng khác. Các phiên bản chính khác nhau của cùng một hệ điều hành thường tạo thành các nền tảng khác nhau. Các hệ điều hành không phải Unix là một câu chuyện khác; . Lưu ý rằng các tệp mã byte Python đã biên dịch độc lập với nền tảng (nhưng không độc lập với phiên bản Python mà chúng được biên dịch. )

Quản trị viên hệ thống sẽ biết cách định cấu hình các chương trình gắn kết hoặc tự động hóa để chia sẻ Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 972 giữa các nền tảng trong khi Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 971 là một hệ thống tệp khác nhau cho mỗi nền tảng

Hàm này không nên được gọi trước PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92, nếu không nó sẽ trả về Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937

Đã thay đổi trong phiên bản 3. 10. Bây giờ nó trả về Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937 nếu được gọi trước PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92.

wchar_t *Py_GetProgramFullPath()
Part of the Stable ABI.

Trả về tên chương trình đầy đủ của tệp thực thi Python; . Chuỗi trả về trỏ vào bộ lưu trữ tĩnh; . Giá trị có sẵn cho mã Python là Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 980

Hàm này không nên được gọi trước PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92, nếu không nó sẽ trả về Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937

Đã thay đổi trong phiên bản 3. 10. Bây giờ nó trả về Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937 nếu được gọi trước PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92.

wchar_t *Py_GetPath()
Part of the Stable ABI.

Trả lại đường dẫn tìm kiếm mô-đun mặc định; . Chuỗi được trả về bao gồm một loạt tên thư mục được phân tách bằng ký tự phân cách phụ thuộc vào nền tảng. Ký tự phân cách là Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 986 trên Unix và macOS, Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 987 trên Windows. Chuỗi trả về trỏ vào bộ lưu trữ tĩnh; . Danh sách PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 46 được khởi tạo với giá trị này khi khởi động trình thông dịch;

Hàm này không nên được gọi trước PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92, nếu không nó sẽ trả về Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937

Đã thay đổi trong phiên bản 3. 10. Bây giờ nó trả về Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937 nếu được gọi trước PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92.

void Py_SetPath(const wchar_t*)
Part of the Stable ABI since version 3.7.

API này được lưu giữ để tương thích ngược. Thay vào đó, nên sử dụng cài đặt Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 993 và Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 994, xem Cấu hình khởi tạo Python .

Đặt đường dẫn tìm kiếm mô-đun mặc định. Nếu hàm này được gọi trước PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92, thì PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 7 sẽ không tính toán đường dẫn tìm kiếm mặc định mà thay vào đó sử dụng đường dẫn được cung cấp. Điều này hữu ích nếu Python được nhúng bởi một ứng dụng có đầy đủ kiến ​​thức về vị trí của tất cả các mô-đun. Các thành phần đường dẫn phải được phân tách bằng ký tự phân cách phụ thuộc vào nền tảng, đó là Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 986 trên Unix và macOS, Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 987 trên Windows

Điều này cũng khiến Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 980 được đặt thành đường dẫn đầy đủ của chương trình (xem Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 0) và để trống Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 960 và Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 970. Người gọi có quyền sửa đổi những điều này nếu được yêu cầu sau khi gọi PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92

Sử dụng PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 0 để giải mã chuỗi byte để nhận được chuỗi wchar_* .

Đối số đường dẫn được sao chép nội bộ, vì vậy người gọi có thể giải phóng nó sau khi cuộc gọi hoàn tất

Đã thay đổi trong phiên bản 3. 8. Đường dẫn đầy đủ của chương trình hiện được sử dụng cho Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 980, thay vì tên chương trình.

Không dùng nữa kể từ phiên bản 3. 11

const char *Py_GetVersion()
Part of the Stable ABI.

Trả lại phiên bản của trình thông dịch Python này. Đây là một chuỗi trông giống như

PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 33

Từ đầu tiên (tối đa ký tự khoảng trắng đầu tiên) là phiên bản Python hiện tại; . Chuỗi trả về trỏ vào bộ lưu trữ tĩnh; . Giá trị có sẵn cho mã Python là PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3406

Xem thêm hằng số PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3407

const char *Py_GetPlatform()
Part of the Stable ABI.

Trả lại mã định danh nền tảng cho nền tảng hiện tại. Trên Unix, điều này được hình thành từ tên "chính thức" của hệ điều hành, được chuyển đổi thành chữ thường, theo sau là số sửa đổi chính; . g. , cho Solaris 2. x, còn được gọi là SunOS 5. x, giá trị là PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3408. Trên macOS, nó là PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3409. Trên Windows, nó là PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3410. Chuỗi trả về trỏ vào bộ lưu trữ tĩnh; . Giá trị có sẵn cho mã Python là PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3411

const char *Py_GetCopyright()
Part of the Stable ABI.

Trả về chuỗi bản quyền chính thức cho phiên bản Python hiện tại chẳng hạn

PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3412

Chuỗi trả về trỏ vào bộ lưu trữ tĩnh; . Giá trị có sẵn cho mã Python là PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3413

const char *Py_GetCompiler()
Part of the Stable ABI.

Trả về một dấu hiệu của trình biên dịch được sử dụng để xây dựng phiên bản Python hiện tại, ví dụ như trong dấu ngoặc vuông

Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 9

Chuỗi trả về trỏ vào bộ lưu trữ tĩnh; . Giá trị có sẵn cho mã Python như một phần của biến PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3406

const char *Py_GetBuildInfo()
Part of the Stable ABI.

Trả về thông tin về số thứ tự và ngày giờ xây dựng của phiên bản trình thông dịch Python hiện tại, chẳng hạn

PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 34

Chuỗi trả về trỏ vào bộ lưu trữ tĩnh; . Giá trị có sẵn cho mã Python như một phần của biến PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3406

void PySys_SetArgvEx(int argc, wchar_t **argv, int updatepath)
Part of the Stable ABI.

API này được lưu giữ để tương thích ngược. Thay vào đó, nên sử dụng cài đặt PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3416, PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3417 và PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3418, xem Cấu hình khởi tạo Python .

Đặt Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 911 dựa trên argc và argv. Các tham số này tương tự như các tham số được truyền cho hàm Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 946 của chương trình với điểm khác biệt là mục nhập đầu tiên phải tham chiếu đến tệp tập lệnh sẽ được thực thi thay vì tệp thực thi lưu trữ trình thông dịch Python. Nếu không có tập lệnh nào sẽ được chạy, mục nhập đầu tiên trong argv có thể là một chuỗi trống. Nếu chức năng này không thể khởi tạo Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 911, tình trạng nghiêm trọng sẽ được báo hiệu bằng cách sử dụng PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3422

Nếu updatepath bằng 0, đây là tất cả chức năng. Nếu updatepath khác 0, hàm cũng sửa đổi PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 46 theo thuật toán sau

  • Nếu tên của tập lệnh hiện có được chuyển vào Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 945, thì đường dẫn tuyệt đối của thư mục chứa tập lệnh sẽ được thêm vào trước PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 46

  • Mặt khác (nghĩa là, nếu argc là Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 918 hoặc Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 945 không trỏ đến tên tệp hiện có), một chuỗi trống sẽ được thêm vào trước PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 46, giống như việc thêm vào thư mục làm việc hiện tại (PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3429)

Sử dụng PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 0 để giải mã chuỗi byte để nhận được chuỗi wchar_* .

Cũng xem các thành viên PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3431 và PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3416 của Cấu hình khởi tạo Python .

Ghi chú

Các ứng dụng nhúng trình thông dịch Python được khuyến nghị cho các mục đích khác ngoài việc thực thi một tập lệnh duy nhất, hãy chuyển Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 918 làm đường dẫn cập nhật và tự cập nhật PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 46 nếu muốn. Xem CVE-2008-5983

Trên các phiên bản trước 3. 1. 3, bạn có thể đạt được hiệu ứng tương tự bằng cách bật phần tử PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 46 đầu tiên theo cách thủ công sau khi đã gọi PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3436, ví dụ: sử dụng

PyRun_SimpleString("import sys; sys.path.pop(0)\n");

Mới trong phiên bản 3. 1. 3

Không dùng nữa kể từ phiên bản 3. 11

void PySys_SetArgv(int argc, wchar_t **argv)
Part of the Stable ABI.

API này được lưu giữ để tương thích ngược. Thay vào đó, nên sử dụng cài đặt PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3416 và PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3417, xem Cấu hình khởi tạo Python .

Chức năng này hoạt động giống như Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 912 với updatepath được đặt thành PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 53 trừ khi trình thông dịch python được bắt đầu với PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 40

Sử dụng PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 0 để giải mã chuỗi byte để nhận được chuỗi wchar_* .

Cũng xem các thành viên PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3431 và PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3416 của Cấu hình khởi tạo Python .

Đã thay đổi trong phiên bản 3. 4. Giá trị updatepath phụ thuộc vào PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 40.

Không dùng nữa kể từ phiên bản 3. 11

void Py_SetPythonHome(const wchar_t *home)
Part of the Stable ABI.

API này được lưu giữ để tương thích ngược. Thay vào đó, nên sử dụng cài đặt PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3446, xem Cấu hình khởi tạo Python .

Đặt thư mục “home” mặc định, nghĩa là vị trí của các thư viện Python tiêu chuẩn. Xem PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 58 để biết ý nghĩa của chuỗi đối số

Đối số phải trỏ đến một chuỗi ký tự không kết thúc trong bộ lưu trữ tĩnh có nội dung sẽ không thay đổi trong suốt thời gian thực hiện chương trình. Không có mã nào trong trình thông dịch Python sẽ thay đổi nội dung của kho lưu trữ này

Sử dụng PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 0 để giải mã chuỗi byte để nhận được chuỗi wchar_* .

Không dùng nữa kể từ phiên bản 3. 11

w_char *Py_GetPythonHome()
Part of the Stable ABI.

Trả về "nhà" mặc định, nghĩa là giá trị được đặt bởi lệnh gọi trước đó thành Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 97 hoặc giá trị của biến môi trường PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 58 nếu nó được đặt

Hàm này không nên được gọi trước PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92, nếu không nó sẽ trả về Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937

Đã thay đổi trong phiên bản 3. 10. Bây giờ nó trả về Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937 nếu được gọi trước PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92.

Trạng thái luồng và Khóa thông dịch viên toàn cầu¶

Trình thông dịch Python không hoàn toàn an toàn cho luồng. Để hỗ trợ các chương trình Python đa luồng, có một khóa chung, được gọi là khóa trình thông dịch chung hoặc GIL< . Không có khóa, ngay cả những thao tác đơn giản nhất cũng có thể gây ra sự cố trong chương trình đa luồng. ví dụ: khi hai luồng đồng thời tăng số lượng tham chiếu của cùng một đối tượng, thì số lượng tham chiếu cuối cùng có thể chỉ được tăng lên một lần thay vì hai lần. , that must be held by the current thread before it can safely access Python objects. Without the lock, even the simplest operations could cause problems in a multi-threaded program: for example, when two threads simultaneously increment the reference count of the same object, the reference count could end up being incremented only once instead of twice.

Do đó, quy tắc tồn tại là chỉ chuỗi đã nhận được GIL mới có thể hoạt động trên các đối tượng Python hoặc gọi các hàm API Python/C. Để mô phỏng thực thi đồng thời, trình thông dịch thường xuyên cố gắng chuyển các luồng (xem PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3455). Khóa cũng được phát hành xung quanh các hoạt động I/O có khả năng chặn như đọc hoặc ghi tệp, để các luồng Python khác có thể chạy trong thời gian chờ đợi.

Trình thông dịch Python giữ một số thông tin sổ sách cụ thể theo luồng bên trong cấu trúc dữ liệu có tên là PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3456. Ngoài ra còn có một biến toàn cục trỏ đến PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3456 hiện tại. nó có thể được truy xuất bằng cách sử dụng PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3458

Giải phóng GIL khỏi mã mở rộng¶

Hầu hết mã mở rộng thao tác trên GIL đều có cấu trúc đơn giản như sau.

Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable.

Điều này phổ biến đến mức tồn tại một cặp macro để đơn giản hóa nó

PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 4

Macro PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3459 mở một khối mới và khai báo một biến cục bộ ẩn;

Khối ở trên mở rộng thành đoạn mã sau

PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 5

Đây là cách các chức năng này hoạt động. khóa trình thông dịch toàn cầu được sử dụng để bảo vệ con trỏ tới trạng thái luồng hiện tại. Khi giải phóng khóa và lưu trạng thái luồng, con trỏ trạng thái luồng hiện tại phải được truy xuất trước khi khóa được giải phóng (vì một luồng khác có thể ngay lập tức lấy khóa và lưu trữ trạng thái luồng của chính nó trong biến toàn cục). Ngược lại, khi lấy khóa và khôi phục trạng thái luồng, khóa phải được lấy trước khi lưu con trỏ trạng thái luồng

Ghi chú

Gọi các hàm I/O của hệ thống là trường hợp sử dụng phổ biến nhất để phát hành GIL, nhưng nó cũng có thể hữu ích trước khi gọi các phép tính chạy dài không cần truy cập vào các đối tượng Python, chẳng hạn như các hàm nén hoặc mật mã hoạt động trên bộ đệm bộ nhớ. Ví dụ: các mô-đun PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3461 và PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3462 tiêu chuẩn giải phóng GIL khi nén hoặc băm dữ liệu

Chủ đề được tạo không phải Python¶

Khi các luồng được tạo bằng API Python chuyên dụng (chẳng hạn như mô-đun PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3463), trạng thái luồng sẽ tự động được liên kết với chúng và do đó, mã hiển thị ở trên là chính xác. Tuy nhiên, khi các luồng được tạo từ C (ví dụ: bởi thư viện bên thứ ba có quản lý luồng riêng), chúng không giữ GIL, cũng như không có cấu trúc trạng thái luồng cho chúng

Nếu bạn cần gọi mã Python từ các luồng này (thường thì đây sẽ là một phần của API gọi lại được cung cấp bởi thư viện bên thứ ba đã nói ở trên), trước tiên bạn phải đăng ký các luồng này với trình thông dịch bằng cách tạo cấu trúc dữ liệu trạng thái luồng, sau đó lấy mã . Khi hoàn tất, bạn nên đặt lại con trỏ trạng thái luồng, giải phóng GIL và cuối cùng giải phóng cấu trúc dữ liệu trạng thái luồng

Các hàm PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3464 và PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3465 tự động thực hiện tất cả các thao tác trên. Thành ngữ điển hình để gọi Python từ luồng C là

PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 4

Lưu ý rằng các hàm PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3466 giả sử chỉ có một trình thông dịch toàn cầu (được tạo tự động bởi PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92). Python hỗ trợ tạo các trình thông dịch bổ sung (sử dụng Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 922), nhưng việc trộn nhiều trình thông dịch và API PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3466 không được hỗ trợ

Lưu ý về fork()¶

Một điều quan trọng khác cần lưu ý về các luồng là hành vi của chúng khi đối mặt với cuộc gọi C PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3470. Trên hầu hết các hệ thống có PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3470, sau khi một quy trình rẽ nhánh, chỉ có luồng đã tạo ra nhánh đó mới tồn tại. Điều này có tác động cụ thể đến cả cách xử lý khóa và tất cả trạng thái được lưu trữ trong thời gian chạy của CPython

Thực tế là chỉ còn lại chuỗi “hiện tại” có nghĩa là mọi khóa do các chuỗi khác nắm giữ sẽ không bao giờ được giải phóng. Python giải quyết vấn đề này cho PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3472 bằng cách lấy các ổ khóa mà nó sử dụng bên trong trước khi rẽ nhánh và giải phóng chúng sau đó. Ngoài ra, nó đặt lại bất kỳ Đối tượng khóa nào trong phần tử con. Khi mở rộng hoặc nhúng Python, không có cách nào để thông báo cho Python về các khóa bổ sung (không phải Python) cần được lấy trước hoặc đặt lại sau khi rẽ nhánh. Các cơ sở hệ điều hành như PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3473 sẽ cần được sử dụng để thực hiện điều tương tự. Ngoài ra, khi mở rộng hoặc nhúng Python, việc gọi trực tiếp PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3470 thay vì thông qua PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3472 (và quay lại hoặc gọi vào Python) có thể dẫn đến bế tắc do một trong các khóa bên trong của Python bị giữ bởi một luồng không còn tồn tại sau đợt rẽ nhánh. PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3476 cố gắng thiết lập lại các ổ khóa cần thiết, nhưng không phải lúc nào cũng có thể.

Việc tất cả các luồng khác biến mất cũng có nghĩa là trạng thái thời gian chạy của CPython ở đó phải được dọn sạch đúng cách, điều mà PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3472 đã làm. Điều này có nghĩa là hoàn thiện tất cả các đối tượng PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3456 khác thuộc về trình thông dịch hiện tại và tất cả các đối tượng PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3479 khác. Do điều này và tính chất đặc biệt của trình thông dịch “chính” , nên chỉ gọi PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3470 trong luồng “chính” của trình thông dịch đó, trong đó thời gian chạy toàn cục của CPython . Ngoại lệ duy nhất là nếu PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3481 sẽ được gọi ngay sau.

API cấp cao¶

Đây là những kiểu và hàm được sử dụng phổ biến nhất khi viết mã mở rộng C hoặc khi nhúng trình thông dịch Python

type PyInterpreterState
Một phần của API có giới hạn< . (as an opaque struct).

Cấu trúc dữ liệu này đại diện cho trạng thái được chia sẻ bởi một số luồng hợp tác. Các chủ đề thuộc cùng một trình thông dịch chia sẻ quản trị mô-đun của chúng và một số mục nội bộ khác. Không có thành viên nào trong cấu trúc này

Các chủ đề thuộc về các trình thông dịch khác nhau ban đầu không chia sẻ gì, ngoại trừ trạng thái xử lý như bộ nhớ khả dụng, bộ mô tả tệp mở, v.v. Khóa trình thông dịch toàn cầu cũng được chia sẻ bởi tất cả các luồng, bất kể chúng thuộc về trình thông dịch nào

type PyThreadState
Một phần của API có giới hạn< . (as an opaque struct).

Cấu trúc dữ liệu này đại diện cho trạng thái của một luồng. Thành viên dữ liệu công khai duy nhất là PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3482 ( PyInterpreterState* ), trỏ đến trạng thái trình thông dịch của chủ đề này.

void PyEval_InitThreads()
Part of the Stable ABI.

Chức năng không dùng nữa mà không làm gì cả

Trong Trăn 3. 6 trở lên, chức năng này đã tạo GIL nếu nó không tồn tại

Đã thay đổi trong phiên bản 3. 9. Chức năng hiện không làm gì cả.

Đã thay đổi trong phiên bản 3. 7. Hàm này hiện được gọi bởi PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92, vì vậy bạn không cần phải tự gọi nó nữa.

Đã thay đổi trong phiên bản 3. 2. Không thể gọi hàm này trước PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92 nữa.

Không dùng nữa kể từ phiên bản 3. 9, đã bị xóa trong phiên bản 3. 11

int PyEval_ThreadsInitialized()
Part of the Stable ABI.

Trả về một giá trị khác không nếu Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 3 đã được gọi. Chức năng này có thể được gọi mà không cần giữ GIL và do đó có thể được sử dụng để tránh các cuộc gọi đến API khóa khi chạy đơn luồng

Đã thay đổi trong phiên bản 3. 7. GIL hiện được khởi tạo bởi PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92.

Không dùng nữa kể từ phiên bản 3. 9, đã bị xóa trong phiên bản 3. 11

PyThreadState *PyEval_SaveThread()
Part of the Stable ABI.

Nhả khóa trình thông dịch toàn cầu (nếu nó đã được tạo) và đặt lại trạng thái luồng thành Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937, trả về trạng thái luồng trước đó (không phải là Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937). Nếu khóa đã được tạo, chủ đề hiện tại phải có được nó

void PyEval_RestoreThread(PyThreadState *tstate)
Part of the Stable ABI.

Nhận khóa trình thông dịch toàn cầu (nếu nó đã được tạo) và đặt trạng thái luồng thành tstate, không được là Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937. Nếu khóa đã được tạo, luồng hiện tại không được lấy nó, nếu không sẽ xảy ra bế tắc

Ghi chú

Gọi hàm này từ một luồng khi thời gian chạy đang hoàn tất sẽ chấm dứt luồng, ngay cả khi luồng không được tạo bởi Python. Bạn có thể sử dụng PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3490 hoặc PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3491 để kiểm tra xem trình thông dịch có đang trong quá trình hoàn thiện hay không trước khi gọi hàm này để tránh bị kết thúc ngoài ý muốn

PyThreadState *PyThreadState_Get()
Part of the Stable ABI.

Trả về trạng thái luồng hiện tại. Khóa thông dịch viên toàn cầu phải được giữ. Khi trạng thái luồng hiện tại là Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937, điều này sẽ gây ra lỗi nghiêm trọng (do đó người gọi không cần kiểm tra Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937)

PyThreadState *PyThreadState_Swap(PyThreadState *tstate)
Part of the Stable ABI.

Hoán đổi trạng thái luồng hiện tại với trạng thái luồng được cung cấp bởi đối số tstate, có thể là Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937. Khóa thông dịch viên toàn cầu phải được giữ và không được phát hành

Các chức năng sau sử dụng lưu trữ cục bộ theo luồng và không tương thích với trình thông dịch phụ

PyGILState_STATE PyGILState_Ensure()
Part of the Stable ABI.

Đảm bảo rằng chuỗi hiện tại đã sẵn sàng để gọi API Python C bất kể trạng thái hiện tại của Python hay khóa trình thông dịch toàn cầu. Điều này có thể được gọi bao nhiêu lần tùy ý bởi một luồng miễn là mỗi cuộc gọi được khớp với một cuộc gọi tới PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3465. Nói chung, các API liên quan đến luồng khác có thể được sử dụng giữa các lệnh gọi PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3464 và PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3465 miễn là trạng thái luồng được khôi phục về trạng thái trước đó trước khi Release(). Ví dụ: việc sử dụng bình thường các macro PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3459 và PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3460 được chấp nhận

Giá trị trả về là một "xử lý" mờ đối với trạng thái chuỗi khi PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3464 được gọi và phải được chuyển đến PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3465 để đảm bảo Python được giữ nguyên trạng thái. Mặc dù các cuộc gọi đệ quy được cho phép, nhưng những điều khiển này không thể được chia sẻ - mỗi cuộc gọi duy nhất tới PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3464 phải lưu điều khiển cho cuộc gọi của nó tới PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3465

Khi hàm trả về, luồng hiện tại sẽ giữ GIL và có thể gọi mã Python tùy ý. Thất bại là một lỗi nghiêm trọng

Ghi chú

Gọi hàm này từ một luồng khi thời gian chạy đang hoàn tất sẽ chấm dứt luồng, ngay cả khi luồng không được tạo bởi Python. Bạn có thể sử dụng PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3490 hoặc PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3491 để kiểm tra xem trình thông dịch có đang trong quá trình hoàn thiện hay không trước khi gọi hàm này để tránh bị kết thúc ngoài ý muốn

void PyGILState_Release(PyGILState_STATE)
Part of the Stable ABI.

Giải phóng mọi tài nguyên đã mua trước đó. Sau lệnh gọi này, trạng thái của Python sẽ giống như trước lệnh gọi PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3464 tương ứng (nhưng nhìn chung, trạng thái này sẽ không được biết đối với người gọi, do đó sẽ sử dụng API GILState)

Mỗi cuộc gọi đến PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3464 phải được khớp với một cuộc gọi đến PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3465 trên cùng một chuỗi

PyThreadState *PyGILState_GetThisThreadState()
Part of the Stable ABI.

Nhận trạng thái chủ đề hiện tại cho chủ đề này. Có thể trả lại Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937 nếu không có API GILState nào được sử dụng trên chuỗi hiện tại. Lưu ý rằng luồng chính luôn có trạng thái luồng như vậy, ngay cả khi không có lệnh gọi trạng thái luồng tự động nào được thực hiện trên luồng chính. Đây chủ yếu là chức năng trợ giúp/chẩn đoán

int PyGILState_Check()

Return PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 53 if the current thread is holding the GIL and Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 918 otherwise. This function can be called from any thread at any time. Only if it has had its Python thread state initialized and currently is holding the GIL will it return PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 53. This is mainly a helper/diagnostic function. It can be useful for example in callback contexts or memory allocation functions when knowing that the GIL is locked can allow the caller to perform sensitive actions or otherwise behave differently.

Mới trong phiên bản 3. 4

Các macro sau đây thường được sử dụng mà không có dấu chấm phẩy ở cuối;

Py_BEGIN_ALLOW_THREADS
Một phần của ABI ổn định .

Macro này mở rộng thành PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 13. Lưu ý rằng nó chứa một dấu ngoặc mở; . Xem ở trên để thảo luận thêm về macro này

Py_END_ALLOW_THREADS
Một phần của ABI ổn định .

Macro này mở rộng thành PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 15. Lưu ý rằng nó chứa một dấu ngoặc nhọn; . Xem ở trên để thảo luận thêm về macro này

Py_BLOCK_THREADS
Một phần của ABI ổn định .

Macro này mở rộng thành PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 17. nó tương đương với PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3460 không có dấu ngoặc đóng

Py_UNBLOCK_THREADS
Một phần của ABI ổn định .

Macro này mở rộng thành PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 19. nó tương đương với PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3459 không có dấu mở ngoặc và khai báo biến

API cấp thấp¶

Tất cả các chức năng sau đây phải được gọi sau PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92

Đã thay đổi trong phiên bản 3. 7. ______392 hiện khởi tạo GIL .

PyInterpreterState *PyInterpreterState_New()
Part of the Stable ABI.

Tạo một đối tượng trạng thái thông dịch viên mới. Khóa thông dịch viên toàn cầu không cần phải được giữ, nhưng có thể được giữ nếu cần tuần tự hóa các cuộc gọi đến chức năng này

Tăng sự kiện kiểm tra PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 23 mà không có đối số.

void PyInterpreterState_Clear(PyInterpreterState *interp)
Part of the Stable ABI.

Đặt lại tất cả thông tin trong một đối tượng trạng thái thông dịch viên. Khóa thông dịch viên toàn cầu phải được giữ

Tăng sự kiện kiểm tra PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 24 mà không có đối số.

void PyInterpreterState_Delete(PyInterpreterState *interp)
Part of the Stable ABI.

Phá hủy một đối tượng trạng thái thông dịch viên. Khóa thông dịch viên toàn cầu không cần phải được giữ. Trạng thái thông dịch viên phải được đặt lại với lệnh gọi trước tới PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 25

PyThreadState *PyThreadState_New(PyInterpreterState *interp)
Part of the Stable ABI.

Tạo một đối tượng trạng thái luồng mới thuộc đối tượng trình thông dịch đã cho. Khóa thông dịch viên toàn cầu không cần phải được giữ, nhưng có thể được giữ nếu cần tuần tự hóa các cuộc gọi đến chức năng này

void PyThreadState_Clear(PyThreadState *tstate)
Part of the Stable ABI.

Đặt lại tất cả thông tin trong một đối tượng trạng thái luồng. Khóa thông dịch viên toàn cầu phải được giữ

Đã thay đổi trong phiên bản 3. 9. Hàm này hiện gọi hàm gọi lại PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 26. Trước đây, điều đó đã xảy ra vào năm PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 27.

void PyThreadState_Delete(PyThreadState *tstate)
Part of the Stable ABI.

Phá hủy một đối tượng trạng thái luồng. Khóa thông dịch viên toàn cầu không cần phải được giữ. Trạng thái luồng phải được đặt lại với lệnh gọi trước tới PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 28

void PyThreadState_DeleteCurrent(void)

Destroy the current thread state and release the global interpreter lock. Like PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 27, the global interpreter lock need not be held. The thread state must have been reset with a previous call to PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 28.

PyFrameObject *PyThreadState_GetFrame(PyThreadState *tstate)
Part of the Stable ABI since version 3.10.

Lấy khung hiện tại của tstate trạng thái chuỗi Python

Trả về tham chiếu mạnh . Trả lại Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937 nếu không có khung nào hiện đang thực thi.

Xem thêm PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 32

tiểu bang không được ________ 4937

Mới trong phiên bản 3. 9

uint64_t PyThreadState_GetID(PyThreadState *tstate)
Part of the Stable ABI since version 3.10.

Nhận mã định danh trạng thái luồng duy nhất của tstate trạng thái luồng Python

tiểu bang không được ________ 4937

Mới trong phiên bản 3. 9

PyInterpreterState *PyThreadState_GetInterpreter(PyThreadState *tstate)
Part of the Stable ABI since version 3.10.

Nhận trình thông dịch của tstate trạng thái chuỗi Python

tiểu bang không được ________ 4937

Mới trong phiên bản 3. 9

void PyThreadState_EnterTracing(PyThreadState *tstate)

Suspend tracing and profiling in the Python thread state tstate.

Tiếp tục chúng bằng hàm PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 36

Mới trong phiên bản 3. 11

void PyThreadState_LeaveTracing(PyThreadState *tstate)

Resume tracing and profiling in the Python thread state tstate suspended by the PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 37 function.

Xem thêm các hàm PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 38 và PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 39

Mới trong phiên bản 3. 11

PyInterpreterState *PyInterpreterState_Get(void)
Part of the Stable ABI since version 3.9.

Nhận thông dịch viên hiện tại

Phát sinh lỗi nghiêm trọng nếu không có trạng thái chuỗi Python hiện tại hoặc không có trình thông dịch hiện tại. Nó không thể trả về NULL

Người gọi phải giữ GIL

Mới trong phiên bản 3. 9

int64_t PyInterpreterState_GetID(PyInterpreterState *interp)
Part of the Stable ABI since version 3.7.

Trả lại ID duy nhất của thông dịch viên. Nếu có bất kỳ lỗi nào khi làm như vậy thì Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 926 được trả về và một lỗi được đặt

Người gọi phải giữ GIL

Mới trong phiên bản 3. 7

PyObject *PyInterpreterState_GetDict(PyInterpreterState *interp)
Part of the Stable ABI since version 3.8.

Trả về một từ điển trong đó có thể lưu trữ dữ liệu dành riêng cho trình thông dịch. Nếu hàm này trả về Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937 thì không có ngoại lệ nào được đưa ra và người gọi sẽ cho rằng không có lệnh dành riêng cho trình thông dịch nào

Đây không phải là sự thay thế cho PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 42, tiện ích mở rộng này nên sử dụng để lưu trữ thông tin trạng thái dành riêng cho trình thông dịch

Mới trong phiên bản 3. 8

typedef PyObject *(*_PyFrameEvalFunction)(PyThreadState *tstate, _PyInterpreterFrame *frame, int throwflag)

Type of a frame evaluation function.

Tham số throwflag được sử dụng bởi phương thức PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 43 của trình tạo. nếu khác không, xử lý ngoại lệ hiện tại

Đã thay đổi trong phiên bản 3. 9. Hàm hiện nhận tham số tstate.

Đã thay đổi trong phiên bản 3. 11. Tham số khung đã thay đổi từ PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 44 thành PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 45.

_PyFrameEvalFunction _PyInterpreterState_GetEvalFrameFunc(PyInterpreterState *interp)

Get the frame evaluation function.

Xem PEP 523 “Thêm API đánh giá khung vào CPython”

Mới trong phiên bản 3. 9

void _PyInterpreterState_SetEvalFrameFunc(PyInterpreterState *interp, _PyFrameEvalFunction eval_frame)

Set the frame evaluation function.

Xem PEP 523 “Thêm API đánh giá khung vào CPython”

Mới trong phiên bản 3. 9

PyObject *PyThreadState_GetDict()
Return value: Borrowed reference. Part of the ABI ổn định .

Trả về một từ điển trong đó các tiện ích mở rộng có thể lưu trữ thông tin trạng thái theo luồng cụ thể. Mỗi tiện ích mở rộng nên sử dụng một khóa duy nhất để sử dụng để lưu trữ trạng thái trong từ điển. Có thể gọi chức năng này khi không có trạng thái luồng hiện tại. Nếu hàm này trả về Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937, thì không có ngoại lệ nào được nêu ra và người gọi sẽ cho rằng không có trạng thái luồng hiện tại nào

int PyThreadState_SetAsyncExc(unsigned long id, PyObject *exc)
Part of the Stable ABI.

Tăng ngoại lệ không đồng bộ trong chuỗi. Đối số id là id luồng của luồng đích; . Hàm này không ăn cắp bất kỳ tham chiếu nào đến ex. Để tránh lạm dụng ngây thơ, bạn phải viết phần mở rộng C của riêng mình để gọi phần này. Phải được gọi với GIL được tổ chức. Trả về số trạng thái luồng đã sửa đổi; . Nếu exc là Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937, ngoại lệ đang chờ xử lý (nếu có) cho chuỗi sẽ bị xóa. Điều này dẫn đến không có ngoại lệ

Đã thay đổi trong phiên bản 3. 7. Loại tham số id đã thay đổi từ long thành unsigned long.

void PyEval_AcquireThread(PyThreadState *tstate)
Part of the Stable ABI.

Lấy khóa trình thông dịch toàn cầu và đặt trạng thái chuỗi hiện tại thành tstate, không được là Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937. Khóa phải được tạo trước đó. Nếu chủ đề này đã có khóa, bế tắc xảy ra

Ghi chú

Gọi hàm này từ một luồng khi thời gian chạy đang hoàn tất sẽ chấm dứt luồng, ngay cả khi luồng không được tạo bởi Python. Bạn có thể sử dụng PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3490 hoặc PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3491 để kiểm tra xem trình thông dịch có đang trong quá trình hoàn thiện hay không trước khi gọi hàm này để tránh bị kết thúc ngoài ý muốn

Đã thay đổi trong phiên bản 3. 8. Đã cập nhật để phù hợp với PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 51, PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 52 và PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3464, đồng thời chấm dứt chuỗi hiện tại nếu được gọi trong khi trình thông dịch đang hoàn thiện.

PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 51 là một chức năng cấp cao hơn luôn khả dụng (ngay cả khi các luồng chưa được khởi tạo)

void PyEval_ReleaseThread(PyThreadState *tstate)
Part of the Stable ABI.

Đặt lại trạng thái luồng hiện tại thành Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937 và giải phóng khóa trình thông dịch toàn cầu. Khóa phải được tạo trước đó và phải được giữ bởi luồng hiện tại. Đối số tstate, không được là Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937, chỉ được sử dụng để kiểm tra xem nó có đại diện cho trạng thái chuỗi hiện tại hay không — nếu không, một lỗi nghiêm trọng sẽ được báo cáo

PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 57 là một chức năng cấp cao hơn luôn khả dụng (ngay cả khi các luồng chưa được khởi tạo)

void PyEval_AcquireLock()
Part of the Stable ABI.

Có được khóa thông dịch viên toàn cầu. Khóa phải được tạo trước đó. Nếu chủ đề này đã có khóa, bế tắc xảy ra

Không dùng nữa kể từ phiên bản 3. 2. Chức năng này không cập nhật trạng thái luồng hiện tại. Vui lòng sử dụng PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 51 hoặc PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 59 để thay thế.

Ghi chú

Gọi hàm này từ một luồng khi thời gian chạy đang hoàn tất sẽ chấm dứt luồng, ngay cả khi luồng không được tạo bởi Python. Bạn có thể sử dụng PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3490 hoặc PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3491 để kiểm tra xem trình thông dịch có đang trong quá trình hoàn thiện hay không trước khi gọi hàm này để tránh bị kết thúc ngoài ý muốn

Đã thay đổi trong phiên bản 3. 8. Đã cập nhật để phù hợp với PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 51, PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 52 và PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3464, đồng thời chấm dứt chuỗi hiện tại nếu được gọi trong khi trình thông dịch đang hoàn thiện.

void PyEval_ReleaseLock()
Part of the Stable ABI.

Phát hành khóa thông dịch viên toàn cầu. Khóa phải được tạo trước đó

Không dùng nữa kể từ phiên bản 3. 2. Chức năng này không cập nhật trạng thái luồng hiện tại. Vui lòng sử dụng PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 57 hoặc PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 66 để thay thế.

Hỗ trợ thông dịch viên¶

Trong hầu hết các trường hợp sử dụng, bạn sẽ chỉ nhúng một trình thông dịch Python duy nhất, có những trường hợp bạn cần tạo một số trình thông dịch độc lập trong cùng một quy trình và thậm chí có thể trong cùng một luồng. Phiên dịch viên phụ cho phép bạn làm điều đó

Trình thông dịch “chính” là trình thông dịch đầu tiên được tạo khi thời gian chạy khởi tạo. Nó thường là trình thông dịch Python duy nhất trong một tiến trình. Không giống như các trình thông dịch phụ, trình thông dịch chính có các trách nhiệm duy nhất trên quy trình toàn cầu như xử lý tín hiệu. Nó cũng chịu trách nhiệm thực thi trong quá trình khởi tạo thời gian chạy và thường là trình thông dịch tích cực trong quá trình hoàn thiện thời gian chạy. Hàm PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 67 trả về một con trỏ về trạng thái của nó

Bạn có thể chuyển đổi giữa các trình thông dịch phụ bằng chức năng PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 68. Bạn có thể tạo và hủy chúng bằng các chức năng sau

PyThreadState *Py_NewInterpreter()
Part of the Stable ABI.

Tạo một trình thông dịch phụ mới. Đây là một môi trường (gần như) hoàn toàn riêng biệt để thực thi mã Python. Đặc biệt, trình thông dịch mới có các phiên bản độc lập, riêng biệt của tất cả các mô-đun đã nhập, bao gồm các mô-đun cơ bản Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 907, Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 908 và PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 925. Bảng các mô-đun đã tải (Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 906) và đường dẫn tìm kiếm mô-đun (PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 46) cũng riêng biệt. Môi trường mới không có biến Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 911. Nó có các đối tượng tệp luồng I/O tiêu chuẩn mới PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 42, PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 76 và Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 939 (tuy nhiên những đối tượng này đề cập đến cùng một bộ mô tả tệp cơ bản)

Giá trị trả về trỏ đến trạng thái luồng đầu tiên được tạo trong trình thông dịch phụ mới. Trạng thái luồng này được tạo ở trạng thái luồng hiện tại. Lưu ý rằng không có chuỗi thực tế nào được tạo; . Nếu việc tạo trình thông dịch mới không thành công, Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937 được trả về; . (Giống như tất cả các hàm API Python/C khác, khóa trình thông dịch toàn cầu phải được giữ trước khi gọi hàm này và vẫn được giữ khi nó quay trở lại; tuy nhiên, không giống như hầu hết các hàm API Python/C khác, không cần có trạng thái luồng hiện tại trên . )

Các mô-đun mở rộng được chia sẻ giữa các trình thông dịch (phụ) như sau

  • Đối với các mô-đun sử dụng khởi tạo nhiều pha, e. g. PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 79, một đối tượng mô-đun riêng biệt được tạo và khởi tạo cho mỗi trình thông dịch. Chỉ các biến tĩnh và toàn cục cấp độ C mới được chia sẻ giữa các đối tượng mô-đun này

  • Đối với các mô-đun sử dụng khởi tạo một pha, e. g. PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 80, lần đầu tiên một tiện ích mở rộng cụ thể được nhập, nó được khởi tạo bình thường và một bản sao (nông cạn) của từ điển mô-đun của nó bị xóa đi. Khi cùng một phần mở rộng được nhập bởi một trình thông dịch (phụ) khác, một mô-đun mới được khởi tạo và chứa đầy nội dung của bản sao này; . Do đó, các đối tượng trong từ điển của mô-đun sẽ được chia sẻ giữa các trình thông dịch (phụ), điều này có thể gây ra hành vi không mong muốn (xem Lỗi và lưu ý bên dưới)

    Lưu ý rằng điều này khác với những gì xảy ra khi tiện ích mở rộng được nhập sau khi trình thông dịch đã được khởi tạo lại hoàn toàn bằng cách gọi Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 913 và PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 92; . Như với khởi tạo nhiều pha, điều này có nghĩa là chỉ các biến toàn cục và tĩnh cấp độ C mới được chia sẻ giữa các mô-đun này

void Py_EndInterpreter(PyThreadState *tstate)
Part of the Stable ABI.

Phá hủy trình thông dịch (phụ) được đại diện bởi trạng thái luồng đã cho. Trạng thái luồng đã cho phải là trạng thái luồng hiện tại. Xem phần thảo luận về các trạng thái luồng bên dưới. Khi cuộc gọi trở lại, trạng thái luồng hiện tại là Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937. Tất cả các trạng thái luồng được liên kết với trình thông dịch này đều bị hủy. (Khóa thông dịch viên toàn cầu phải được giữ trước khi gọi chức năng này và vẫn được giữ khi nó quay lại. ) Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 913 sẽ hủy tất cả các trình thông dịch phụ chưa bị hủy rõ ràng vào thời điểm đó

Lỗi và lưu ý¶

Vì các trình thông dịch phụ (và trình thông dịch chính) là một phần của cùng một quy trình, nên sự cách ly giữa chúng không hoàn hảo — ví dụ: sử dụng các thao tác tệp cấp thấp như PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 87, chúng có thể (vô tình hoặc cố ý) ảnh hưởng đến các tệp đang mở của nhau. Do cách chia sẻ tiện ích mở rộng giữa (phụ) trình thông dịch, một số tiện ích mở rộng có thể không hoạt động bình thường; . Có thể chèn các đối tượng được tạo trong một trình thông dịch phụ vào một không gian tên của một trình thông dịch (phụ) khác;

Cần đặc biệt cẩn thận để tránh chia sẻ các hàm, phương thức, thể hiện hoặc lớp do người dùng định nghĩa giữa các trình thông dịch phụ, vì các thao tác nhập được thực thi bởi các đối tượng đó có thể ảnh hưởng đến từ điển mô-đun đã tải của trình thông dịch (phụ) sai. Điều quan trọng không kém là tránh chia sẻ các đối tượng mà từ đó có thể truy cập được ở trên

Cũng lưu ý rằng việc kết hợp chức năng này với các API PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3466 là rất tế nhị, bởi vì các API này giả định sự phân biệt giữa trạng thái chuỗi Python và chuỗi cấp hệ điều hành, một giả định bị phá vỡ bởi sự hiện diện của trình thông dịch phụ. Bạn không nên chuyển đổi trình thông dịch phụ giữa một cặp cuộc gọi PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3464 và PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3465 phù hợp. Hơn nữa, các tiện ích mở rộng (chẳng hạn như PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 91) sử dụng các API này để cho phép gọi mã Python từ các chuỗi không phải Python được tạo có thể sẽ bị hỏng khi sử dụng trình thông dịch phụ

Thông báo không đồng bộ¶

Một cơ chế được cung cấp để tạo thông báo không đồng bộ cho luồng trình thông dịch chính. Các thông báo này có dạng con trỏ hàm và đối số con trỏ void

int Py_AddPendingCall(int (*func)(void*), void *arg)
Part of the Stable ABI.

Lên lịch một chức năng được gọi từ luồng trình thông dịch chính. Khi thành công, Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 918 được trả về và func được xếp hàng để được gọi trong luồng chính. Khi thất bại, Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 926 được trả lại mà không đặt bất kỳ ngoại lệ nào

Khi được xếp hàng đợi thành công, cuối cùng func sẽ được gọi từ chuỗi trình thông dịch chính với đối số arg. Nó sẽ được gọi không đồng bộ đối với mã Python đang chạy bình thường, nhưng với cả hai điều kiện này được đáp ứng

  • trên một mã byte ranh giới;

  • với luồng chính giữ khóa trình thông dịch chung (do đó, func có thể sử dụng API C đầy đủ).

func phải trả về Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 918 nếu thành công hoặc Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 926 nếu thất bại với một ngoại lệ được đặt. func sẽ không bị gián đoạn để thực hiện đệ quy một thông báo không đồng bộ khác, nhưng nó vẫn có thể bị gián đoạn để chuyển luồng nếu khóa trình thông dịch chung được giải phóng

Hàm này không cần trạng thái luồng hiện tại để chạy và không cần khóa trình thông dịch toàn cầu

Để gọi chức năng này trong trình thông dịch con, người gọi phải giữ GIL. Mặt khác, chức năng func có thể được lên lịch gọi từ trình thông dịch sai

Cảnh báo

Đây là chức năng cấp thấp, chỉ hữu ích cho những trường hợp rất đặc biệt. Không có gì đảm bảo rằng func sẽ được gọi nhanh nhất có thể. Nếu luồng chính đang bận thực hiện lệnh gọi hệ thống, func sẽ không được gọi trước khi lệnh gọi hệ thống trở lại. Hàm này thường không phù hợp để gọi mã Python từ các luồng C tùy ý. Thay vào đó, hãy sử dụng API PyGILState .

Đã thay đổi trong phiên bản 3. 9. Nếu chức năng này được gọi trong trình thông dịch phụ, chức năng func hiện được lên lịch để được gọi từ trình thông dịch phụ, thay vì được gọi từ trình thông dịch chính. Mỗi trình thông dịch phụ hiện có danh sách các cuộc gọi theo lịch trình riêng.

Mới trong phiên bản 3. 1

Lập hồ sơ và theo dõi¶

Trình thông dịch Python cung cấp một số hỗ trợ cấp thấp để đính kèm các tiện ích theo dõi thực thi và lược tả. Chúng được sử dụng cho các công cụ phân tích hồ sơ, gỡ lỗi và bảo hiểm

Giao diện C này cho phép mã định hình hoặc theo dõi để tránh chi phí gọi thông qua các đối tượng có thể gọi được ở cấp độ Python, thay vào đó thực hiện lệnh gọi hàm C trực tiếp. Các thuộc tính thiết yếu của cơ sở không thay đổi;

typedef int (*Py_tracefunc)(PyObject *obj, PyFrameObject *frame, int what, PyObject *arg)

The type of the trace function registered using PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 39 and PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 38. The first parameter is the object passed to the registration function as obj, frame is the frame object to which the event pertains, what is one of the constants PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 98, PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 99, Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 00, Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 01, Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 02, Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 03, Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 04, or Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 05, and arg depends on the value of what:

Giá trị của cái gì

Ý nghĩa của arg

PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 98

Luôn luôn Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 07

PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 99

Thông tin ngoại lệ được trả về bởi Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 09

Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 00

Luôn luôn Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 07

Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 01

Giá trị được trả lại cho người gọi hoặc Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937 nếu do ngoại lệ gây ra

Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 02

Đối tượng chức năng được gọi

Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 03

Đối tượng chức năng được gọi

Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 04

Đối tượng chức năng được gọi

Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 05

Luôn luôn Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 07

int PyTrace_CALL

Giá trị của tham số what cho hàm Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 19 khi một lệnh gọi mới tới . Lưu ý rằng việc tạo trình vòng lặp cho hàm tạo không được báo cáo vì không có điều khiển chuyển sang mã byte Python trong khung tương ứng.

int PyTrace_EXCEPTION

Giá trị của tham số what cho hàm Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 19 khi có ngoại lệ . Hàm gọi lại được gọi với giá trị này để làm gì sau khi bất kỳ mã byte nào được xử lý, sau đó ngoại lệ sẽ được đặt trong khung đang được thực thi. Ảnh hưởng của điều này là khi việc lan truyền ngoại lệ làm cho ngăn xếp Python bị bung ra, lệnh gọi lại được gọi khi quay lại từng khung khi ngoại lệ lan truyền. Chỉ các hàm theo dõi mới nhận được các sự kiện này; .

int PyTrace_LINE

Giá trị được truyền dưới dạng tham số what cho hàm Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 19 (chứ không phải là . Nó có thể bị tắt đối với một khung bằng cách đặt Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 22 thành 0 trên khung đó.

int PyTrace_RETURN

Giá trị cho tham số what của các hàm Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 19 khi một cuộc gọi sắp diễn ra .

int PyTrace_C_CALL

Giá trị của tham số what đối với hàm Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 19 khi hàm C sắp .

int PyTrace_C_EXCEPTION

Giá trị cho tham số what của hàm Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 19 khi hàm C tăng .

int PyTrace_C_RETURN

Giá trị cho tham số what của hàm Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 19 khi hàm C đã trả về.

int PyTrace_OPCODE

Giá trị cho tham số what của các hàm Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 19 (nhưng không phải các hàm định hình) . Sự kiện này không được phát ra theo mặc định. nó phải được yêu cầu rõ ràng bằng cách đặt Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 28 thành 1 trên khung.

void PyEval_SetProfile(Py_tracefunc func, PyObject *obj)

Set the profiler function to func. The obj parameter is passed to the function as its first parameter, and may be any Python object, or Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937. If the profile function needs to maintain state, using a different value for obj for each thread provides a convenient and thread-safe place to store it. The profile function is called for all monitored events except Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 00 Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 05 and PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 99.

Xem thêm hàm Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 33

Người gọi phải giữ GIL .

void PyEval_SetTrace(Py_tracefunc func, PyObject *obj)

Set the tracing function to func. This is similar to PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 39, except the tracing function does receive line-number events and per-opcode events, but does not receive any event related to C function objects being called. Any trace function registered using PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 38 will not receive Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 02, Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 03 or Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 04 as a value for the what parameter.

Xem thêm hàm Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 39

Người gọi phải giữ GIL .

Hỗ trợ trình gỡ lỗi nâng cao¶

Các chức năng này chỉ dành cho các công cụ sửa lỗi nâng cao sử dụng

PyInterpreterState *PyInterpreterState_Head()

Return the interpreter state object at the head of the list of all such objects.

PyInterpreterState *PyInterpreterState_Main()

Return the main interpreter state object.

PyInterpreterState *PyInterpreterState_Next(PyInterpreterState *interp)

Return the next interpreter state object after interp from the list of all such objects.

PyThreadState *PyInterpreterState_ThreadHead(PyInterpreterState *interp)

Return the pointer to the first PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3456 object in the list of threads associated with the interpreter interp.

PyThreadState *PyThreadState_Next(PyThreadState *tstate)

Return the next thread state object after tstate from the list of all such objects belonging to the same PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 3479 object.

Hỗ trợ Lưu trữ Cục bộ Chủ đề¶

Trình thông dịch Python cung cấp hỗ trợ cấp thấp cho lưu trữ cục bộ theo luồng (TLS) bao bọc quá trình triển khai TLS gốc cơ bản để hỗ trợ API lưu trữ cục bộ theo luồng cấp Python (Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 42). Các API cấp C của CPython tương tự như các API được cung cấp bởi pthreads và Windows. sử dụng khóa luồng và các hàm để liên kết giá trị void* cho mỗi luồng.

Không cần giữ GIL khi gọi các chức năng này;

Lưu ý rằng Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 43 không bao gồm khai báo các API TLS, bạn cần bao gồm Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 44 để sử dụng lưu trữ cục bộ theo luồng

Ghi chú

Không hàm API nào trong số này xử lý việc quản lý bộ nhớ thay cho các giá trị void* . Bạn cần tự mình phân bổ và giải quyết chúng. Nếu các giá trị void*PyObject*, these functions don’t do refcount operations on them either.

API lưu trữ dành riêng cho chủ đề (TSS)¶

API TSS được giới thiệu để thay thế việc sử dụng API TLS hiện có trong trình thông dịch CPython. API này sử dụng loại mới Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 45 thay vì int để biểu thị các khóa luồng.

Mới trong phiên bản 3. 7

Xem thêm

“Một C-API mới cho lưu trữ cục bộ theo luồng trong CPython” (PEP 539)

type Py_tss_t

Cấu trúc dữ liệu này đại diện cho trạng thái của khóa chuỗi, định nghĩa của nó . Không có thành viên nào trong cấu trúc này.

Khi Py_LIMITED_API không được xác định, phân bổ tĩnh của loại này bởi Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 46 được cho phép.

Py_tss_NEEDS_INIT

Macro này mở rộng tới trình khởi tạo cho biến Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 45. Lưu ý rằng macro này sẽ không được xác định bằng Py_LIMITED_API .

Phân bổ động¶

Phân bổ động của Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 45, bắt buộc trong các mô-đun mở rộng được xây dựng với Py_LIMITED_API , nơi không thể phân bổ tĩnh loại này do quá trình triển khai của nó .

Py_tss_t *PyThread_tss_alloc()
Part of the Stable ABI since version 3.7.

Trả về giá trị có cùng trạng thái với giá trị được khởi tạo với Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 46 hoặc Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937 trong trường hợp phân bổ động không thành công

void PyThread_tss_free(Py_tss_t *key)
Part of the Stable ABI since version 3.7.

Giải phóng khóa đã cho được phân bổ bởi Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 51, sau lần đầu tiên gọi Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 52 để đảm bảo bất kỳ chuỗi cục bộ liên quan nào đã được bỏ chỉ định. Đây là lệnh cấm nếu đối số chính là Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937

Ghi chú

Một phím được giải phóng trở thành một con trỏ lơ lửng. Bạn nên đặt lại khóa thành Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937

Phương pháp¶

Khóa tham số của các chức năng này không được là Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937. Ngoài ra, các hành vi của Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 56 và Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 57 không được xác định nếu Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 45 đã cho chưa được khởi tạo bởi Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 59

int PyThread_tss_is_created(Py_tss_t *key)
Part of the Stable ABI since version 3.7.

Trả về một giá trị khác 0 nếu Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 45 đã cho đã được khởi tạo bởi Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 59

int PyThread_tss_create(Py_tss_t *key)
Part of the Stable ABI since version 3.7.

Trả về giá trị 0 khi khởi tạo thành công khóa TSS. Hành vi không được xác định nếu giá trị được chỉ ra bởi đối số chính không được khởi tạo bởi Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 46. Chức năng này có thể được gọi lặp đi lặp lại trên cùng một khóa – gọi nó trên một khóa đã được khởi tạo là không hoạt động và trả về thành công ngay lập tức

void PyThread_tss_delete(Py_tss_t *key)
Part of the Stable ABI since version 3.7.

Hủy khóa TSS để quên các giá trị được liên kết với khóa trên tất cả các luồng và thay đổi trạng thái khởi tạo của khóa thành chưa được khởi tạo. Khóa bị hủy có thể được khởi tạo lại bởi Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 59. Chức năng này có thể được gọi lặp đi lặp lại trên cùng một phím – gọi nó trên một phím đã bị hủy là điều không thể

int PyThread_tss_set(Py_tss_t *key, void *value)
Part of the Stable ABI since version 3.7.

Trả về giá trị 0 để biểu thị việc liên kết thành công giá trị void* với khóa TSS trong . Mỗi chuỗi có một ánh xạ riêng biệt của khóa tới một giá trị void* .

void *PyThread_tss_get(Py_tss_t *key)
Part of the Stable ABI since version 3.7.

Trả về giá trị void* được liên kết với khóa TSS trong chuỗi hiện tại. Điều này trả về Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 937 nếu không có giá trị nào được liên kết với khóa trong luồng hiện tại.

API lưu trữ cục bộ luồng (TLS)¶

Không dùng nữa kể từ phiên bản 3. 7. API này được thay thế bởi API lưu trữ dành riêng cho luồng (TSS) .

Ghi chú

Phiên bản API này không hỗ trợ các nền tảng trong đó khóa TLS gốc được xác định theo cách không thể chuyển sang PyRun_SimpleString("import sys; sys.path.pop(0)\n"); 42 một cách an toàn. Trên các nền tảng như vậy, Save the thread state in a local variable. Release the global interpreter lock. ... Do some blocking I/O operation ... Reacquire the global interpreter lock. Restore the thread state from the local variable. 66 sẽ trở lại ngay lập tức với trạng thái lỗi và tất cả các chức năng TLS khác sẽ không hoạt động trên các nền tảng đó

Do sự cố tương thích đã lưu ý ở trên, phiên bản API này sẽ không được sử dụng trong mã mới

Khởi tạo trong Python là gì?

Phương thức __init__ là tương đương Python với hàm tạo C++ theo cách tiếp cận hướng đối tượng . Hàm __init__ được gọi mỗi khi một đối tượng được tạo từ một lớp. Phương thức __init__ cho phép lớp khởi tạo các thuộc tính của đối tượng và không phục vụ mục đích nào khác. Nó chỉ được sử dụng trong các lớp học.

Khởi tạo có nghĩa là gì trong mã hóa?

Khởi tạo là quá trình định vị và sử dụng các giá trị đã xác định cho dữ liệu biến được chương trình máy tính sử dụng . Ví dụ: một hệ điều hành hoặc chương trình ứng dụng được cài đặt với các giá trị mặc định hoặc do người dùng chỉ định để xác định các khía cạnh nhất định về cách thức hoạt động của hệ thống hoặc chương trình.

Khởi tạo một chức năng là gì?

Hàm khởi tạo ( InitFcn ) là một loại gọi lại được thực thi hoặc đánh giá khi bắt đầu biên dịch mô hình . Bạn có thể chỉ định gọi lại InitFcn làm mô hình hoặc chặn gọi lại. Ghi chú. Các điều khiển biến thể chỉ có thể được xác định trong lệnh gọi lại InitFcn của mô hình.

Khởi tạo một lớp trong Python có nghĩa là gì?

Thao tác khởi tạo (“gọi” một đối tượng lớp) tạo một đối tượng trống . Nhiều lớp muốn tạo các đối tượng với các thể hiện được tùy chỉnh theo trạng thái ban đầu cụ thể. Do đó, một lớp có thể định nghĩa một phương thức đặc biệt có tên __init__() , như thế này. def __init__(bản thân). bản thân.

Chủ đề