2009-02-20 18 views
7

Tôi có một mô-đun sử dụng ctypes để bọc một số chức năng từ một thư viện tĩnh vào một lớp. Khi mô-đun tải, nó sẽ gọi hàm khởi tạo trong thư viện tĩnh. Khi mô-đun được tải xuống (có lẽ khi trình thông dịch thoát), có một hàm dỡ trong thư viện mà tôi muốn được gọi. Làm thế nào tôi có thể tạo ra móc này?Phát hiện khi một mô-đun Python tải

Trả lời

13

Sử dụng atexit mô-đun:

import mymodule 
import atexit 

# call mymodule.unload('param1', 'param2') when the interpreter exits: 
atexit.register(mymodule.unload, 'param1', 'param2') 

Một ví dụ đơn giản từ các tài liệu, sử dụng register như một trang trí: (?)

import atexit 

@atexit.register 
def goodbye(): 
    print "You are now leaving the Python sector." 
+0

atexit có thể là một giải pháp bất tiện/ô uế, đặc biệt là nếu quá trình dĩa vv Có lẽ nó tốt hơn để chỉ bỏ qua phép thuật và cung cấp một "dọn dẹp"/chức năng hoàn thành mà người sử dụng mô-đun nên gọi? – u0b34a0f6ae

+0

nếu bạn 'fork'ed bạn muốn dọn dẹp quá trình con quá, vì nó sẽ chia sẻ tất cả các cấu trúc bộ nhớ. – nosklo

+0

Có cách nào để nắm bắt thời điểm tải mô-đun do một số trường hợp khác không? (Ví dụ: nếu 'tải lại' được gọi trên đó?) – max

Các vấn đề liên quan