Tüm Ürünler
Search
Belge Merkezi

Function Compute:İşlev örnekleri için yaşam döngüsü kanca işlevleri

Son Güncelleme:Oct 08, 2026

Bir işlev örneği başlatıldığında veya kapatıldığında özel mantık çalıştırmanız gerekebilir; örneğin ilk istek gelmeden önce bir veritabanı bağlantısı açmak veya örnek yok edilmeden önce kaynakları düzgün bir şekilde serbest bırakmak. Yaşam döngüsü kanca işlevleri, Function Compute'un bir işlev örneğinin yaşamındaki bu iki noktada otomatik olarak çağıracağı Python işlevlerini kaydetmenize olanak tanır.

Python çalışma zamanları için iki tür kanca işlevi kullanılabilir:

  • Initializer hook — Bir örnek başladıktan sonra, işleyici herhangi bir isteği işlemeye başlamadan önce bir kez çalışır.

  • PreStop hook — Bir örnek yok edilmeden önce çalışır ve kaynakları serbest bırakmanız için size zaman tanır.

Yaşam döngüsü kanca işlevlerinin çalışma biçimi

Bir işlev örneği üç aşamadan geçer:

Aşama Çalışma Zamanı Kanca İşlevi
Init (Başlatma) Örnek başladığında Initializer hook (yapılandırıldıysa)
Invoke (Çağrı) İşleyici istekleri işlerken —
Shutdown (Kapatma) Örnek yok edildiğinde PreStop hook (yapılandırıldıysa)

Yaşam döngüsü kanca işlevlerinin çalıştırılması normal çağrılarla aynı oran üzerinden faturalandırılır. Günlükler Function Logs, Real-time Logs ve Advanced Logs bölümlerinde görüntülenir ancak çağrı istek listesinde yer almaz.

Initializer hook

Initializer hook her örnek için bir kez çalışır; örnek başladıktan sonra ancak ilk işleyici çağrısından önce yürütülür. Function Compute örnek başına tam olarak bir kez çalıştırılmasını garanti eder.

Hata davranışı: Kanca işlevi başarısız olursa çağrı bir hata döndürür. Sonraki çağrıda Function Compute yeni bir örnek oluşturur ve Initializer hook'u yeniden çalıştırır.

Yöntem imzası:

Parametre Açıklama
context Geçerli çağrı için çalışma zamanı meta verilerini sağlar.
Dönüş değeri Yok.

Örnek: Veritabanı bağlantısını başlatma

Yaygın bir desen paylaşılan kaynakların Initializer hook içinde açılmasıdır; böylece her işleyici çağrısı bu kaynakları yeniden kullanır ve her istekte yeniden bağlantı kurulmasına gerek kalmaz.

import os
import pymysql

db_connection = None

def initialize(context):
    global db_connection
    host = os.environ.get("DB_HOST")
    user = os.environ.get("DB_USER")
    password = os.environ.get("DB_PASSWORD")
    database = os.environ.get("DB_NAME")

    db_connection = pymysql.connect(
        host=host,
        user=user,
        password=password,
        database=database,
    )
    print("Database connection established")

Yöntem adı (bu örnekte initialize) yapılandırdığınız Initializer Hook değeriyle eşleşmelidir. Örneğin Initializer Hook değerini index.initialize olarak ayarlamak Function Compute'a index.py dosyasındaki initialize yöntemini çağırması gerektiğini bildirir.

PreStop hook

PreStop hook bir işlev örneği yok edilmeden önce çalışır. Yöntem imzası Initializer hook ile aynıdır: Tek bir context parametresi bulunur ve dönüş değeri yoktur.

Örnek: Veritabanı bağlantısını kapatma

def preStop(context):
    global db_connection
    if db_connection:
        db_connection.close()
        print("Database connection closed")
İşlev örnekleri önbelleğe alınır ve son çağrıdan hemen sonra yok edilmez. Bu nedenle PreStop günlükleri hemen görünmeyebilir. Test amacıyla bir PreStop hook'unu hızlıca tetiklemek için işlevin yapılandırmasını veya kodunu güncelleyin; bu işlem mevcut örnekleri geri dönüştürür. Ardından PreStop günlüklerini Function Logs bölümünde görüntüleyebilirsiniz.

Yaşam döngüsü kanca işlevlerini yapılandırma

Function Compute konsolunu kullanma

  1. Function Compute konsoluna giriş yapın. Sol gezinme bölmesinde Functions öğesine tıklayın.

  2. Yapılandırmak istediğiniz işlevi seçin.

  3. İşlev ayarlarında Initializer Hook ve PreStop Hook alanlarını <filename>.<method> biçimini kullanarak ayarlayın; örneğin index.initialize veya index.preStop.

Ayrıntılı adımlar için bkz. Örnek yaşam döngülerini yapılandırma.

Lifecycle hooks configuration in the Function Compute console

Serverless Devs kullanma

s.yaml dosyasındaki işlev kaynağı altına instanceLifecycleConfig ekleyin. Her iki kanca işlevi de bir handler (<filename>.<method> biçiminde) ve bir timeout (saniye cinsinden) gerektirir.

edition: 3.0.0
name: fcDeployApp
access: "default"

vars: # The global variables
  region: "cn-hangzhou"

resources:
  hello_world:
    component: fc3 # The name of the component
    props:
      region: ${vars.region}
      functionName: "emojipy"
      description: 'this is emoji'
      runtime: "python3"
      code: ./
      handler: index.handler
      memorySize: 128
      timeout: 30
      environmentVariables:
        PYTHONPATH: /code:/code/python:/opt/python
      instanceLifecycleConfig:
        initializer:
          handler: index.initialize
          timeout: 60  # Timeout in seconds for the Initializer hook
        preStop:
          handler: index.preStop
          timeout: 60  # Timeout in seconds for the PreStop hook

timeout değerini başlatma veya temizleme mantığınızı kapsayacak kadar uzun ayarlayın. YAML sözdizimi ayrıntıları için bkz. Serverless Devs ortak komutları.

Yaşam döngüsü kanca işlevi günlüklerini görüntüleme

  1. Function Compute konsoluna giriş yapın. Sol gezinme bölmesinde Functions öğesine tıklayın.

  2. Üst gezinme çubuğunda bir bölge seçin. Functions sayfasında işleve tıklayın.

  3. İşlev ayrıntıları sayfasında Test Function sekmesine tıklayın ardından Test Function düğmesine tıklayın ve Logs > Function Logs yolunu izleyin.

Logs sekmesi hem çağrı günlüklerini hem de yaşam döngüsü kanca işlevi günlüklerini gösterir. Her kanca yürütmesi RequestId içeren Start ve End işaretleriyle çevrelenmiştir:

2024-03-04 17:57:28FC Initialize Start RequestId: 1-65e59b07-1520da26-bf73bbb91b69
2024-03-04 17:57:282024-03-04 09:57:28.192 1-65e59b07-1520da26-bf73bbb91b69 [info] initializer
2024-03-04 17:57:28FC Initialize End RequestId: 1-65e59b07-1520da26-bf73bbb91b69
2024-03-04 17:57:28FC Invoke Start RequestId: 1-65e59b07-1520da26-bf73bbb91b69
2024-03-04 17:57:28FC Invoke End RequestId: 1-65e59b07-1520da26-bf73bbb91b69

PreStop hook günlükleri de aynı biçimi takip eder:

2024-03-04 18:33:26FC PreStop Start RequestId: 93c93603-9fbe-4576-9458-193c8b213031
2024-03-04 18:33:262024-03-04 10:33:26.077 93c93603-9fbe-4576-9458-193c8b213031 [info] preStop
2024-03-04 18:33:26FC PreStop End RequestId: 93c93603-9fbe-4576-9458-193c8b213031

Sırada ne var