Hướng dẫn atexit python - trăn atexit


Mô -đun atexit xác định các chức năng để đăng ký và bỏ đăng ký các chức năng làm sạch. Các chức năng do đó đã đăng ký được tự động thực hiện khi chấm dứt thông dịch viên thông thường. atexit chạy các chức năng này theo thứ tự ngược lại mà chúng đã được đăng ký; Nếu bạn đăng ký A, BC, vào thời điểm kết thúc phiên dịch, chúng sẽ được chạy theo thứ tự C, B, A.

Lưu ý: Các chức năng được đăng ký thông qua mô -đun này không được gọi khi chương trình bị giết bởi tín hiệu không được xử lý bởi Python, khi phát hiện lỗi nội bộ gây tử vong của Python hoặc khi

def goodbye(name, adjective):
    print('Goodbye %s, it was %s to meet you.' % (name, adjective))

import atexit

atexit.register(goodbye, 'Donny', 'nice')
# or:
atexit.register(goodbye, adjective='nice', name='Donny')
1 được gọi. The functions registered via this module are not called when the program is killed by a signal not handled by Python, when a Python fatal internal error is detected, or when
def goodbye(name, adjective):
    print('Goodbye %s, it was %s to meet you.' % (name, adjective))

import atexit

atexit.register(goodbye, 'Donny', 'nice')
# or:
atexit.register(goodbye, adjective='nice', name='Donny')
1 is called.

Đã thay đổi trong phiên bản 3.7: Khi được sử dụng với các trình tự phụ C-API, các chức năng đã đăng ký là cục bộ với trình thông dịch mà họ đã đăng ký.When used with C-API subinterpreters, registered functions are local to the interpreter they were registered in.

atexit.register (func, *args, ** kwargs) ¶register(func, *args, **kwargs)

Đăng ký func như một chức năng sẽ được thực thi khi chấm dứt. Bất kỳ đối số tùy chọn nào sẽ được chuyển cho Func phải được chuyển dưới dạng đối số cho

def goodbye(name, adjective):
    print('Goodbye %s, it was %s to meet you.' % (name, adjective))

import atexit

atexit.register(goodbye, 'Donny', 'nice')
# or:
atexit.register(goodbye, adjective='nice', name='Donny')
2. Có thể đăng ký cùng một chức năng và đối số nhiều lần.

Khi chấm dứt chương trình bình thường (ví dụ, nếu

def goodbye(name, adjective):
    print('Goodbye %s, it was %s to meet you.' % (name, adjective))

import atexit

atexit.register(goodbye, 'Donny', 'nice')
# or:
atexit.register(goodbye, adjective='nice', name='Donny')
3 được gọi hoặc thực hiện mô -đun chính hoàn thành), tất cả các chức năng được đăng ký đều được gọi vào cuối cùng, thứ nhất. Giả định là các mô -đun cấp thấp hơn thường sẽ được nhập trước các mô -đun cấp cao hơn và do đó phải được làm sạch sau.

Nếu một ngoại lệ được nêu ra trong quá trình thực hiện các trình xử lý thoát, một dấu vết được in (trừ khi

def goodbye(name, adjective):
    print('Goodbye %s, it was %s to meet you.' % (name, adjective))

import atexit

atexit.register(goodbye, 'Donny', 'nice')
# or:
atexit.register(goodbye, adjective='nice', name='Donny')
4 được nâng lên) và thông tin ngoại lệ được lưu. Sau khi tất cả những người xử lý thoát đã có cơ hội chạy, ngoại lệ cuối cùng được nâng lên được nâng lên.

Hàm này trả về func, giúp nó có thể sử dụng nó như một người trang trí.

atexit.unregister (func) ¶unregister(func)

Xóa hàm khỏi danh sách các chức năng sẽ được chạy khi tắt máy.

def goodbye(name, adjective):
    print('Goodbye %s, it was %s to meet you.' % (name, adjective))

import atexit

atexit.register(goodbye, 'Donny', 'nice')
# or:
atexit.register(goodbye, adjective='nice', name='Donny')
5 âm thầm không làm gì nếu Func không được đăng ký trước đó. Nếu func đã được đăng ký nhiều lần, mọi sự xuất hiện của chức năng đó trong ngăn xếp cuộc gọi atexit sẽ bị xóa. So sánh bình đẳng (
def goodbye(name, adjective):
    print('Goodbye %s, it was %s to meet you.' % (name, adjective))

import atexit

atexit.register(goodbye, 'Donny', 'nice')
# or:
atexit.register(goodbye, adjective='nice', name='Donny')
7) được sử dụng nội bộ trong quá trình không đăng ký, do đó các tài liệu tham khảo chức năng không cần phải có danh tính phù hợp.

atexit Ví dụ En

Ví dụ đơn giản sau đây cho thấy cách một mô -đun có thể khởi tạo bộ đếm từ tệp khi được nhập và lưu giá trị cập nhật của bộ đếm tự động khi chương trình chấm dứt mà không dựa vào ứng dụng thực hiện cuộc gọi rõ ràng vào mô -đun này khi chấm dứt.

try:
    with open('counterfile') as infile:
        _count = int(infile.read())
except FileNotFoundError:
    _count = 0

def incrcounter(n):
    global _count
    _count = _count + n

def savecounter():
    with open('counterfile', 'w') as outfile:
        outfile.write('%d' % _count)

import atexit

atexit.register(savecounter)

Đối số vị trí và từ khóa cũng có thể được chuyển cho

def goodbye(name, adjective):
    print('Goodbye %s, it was %s to meet you.' % (name, adjective))

import atexit

atexit.register(goodbye, 'Donny', 'nice')
# or:
atexit.register(goodbye, adjective='nice', name='Donny')
2 để được chuyển cho chức năng đã đăng ký khi nó được gọi là:

def goodbye(name, adjective):
    print('Goodbye %s, it was %s to meet you.' % (name, adjective))

import atexit

atexit.register(goodbye, 'Donny', 'nice')
# or:
atexit.register(goodbye, adjective='nice', name='Donny')

Sử dụng như một người trang trí:decorator:

import atexit

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

Điều này chỉ hoạt động với các chức năng có thể được gọi mà không có đối số.