Yandex Cloud
Search
Discuss with expertTry it for free
  • Customer Stories
  • Documentation
  • Blog
  • All Services
  • System Status
  • Marketplace
    • Featured
    • Infrastructure & Network
    • Data Platform
    • AI for business
    • Security
    • DevOps tools
    • Serverless
    • Monitoring & Resources
  • All Solutions
    • By industry
    • By use case
    • Economics and Pricing
    • Security
    • Technical Support
    • Start testing with double trial credits
    • Cloud credits to scale your IT product
    • Gateway to Russia
    • Cloud for Startups
    • Center for Technologies and Society
    • Yandex Cloud Partner program
    • Price calculator
    • Pricing plans
  • Customer Stories
  • Documentation
  • Blog
© 2026 Direct Cursus Technology L.L.C.
Yandex Cloud Functions
  • Comparing with other Yandex Cloud services
    • Overview
    • Managing dependencies
    • Request handler
    • Invocation context
    • Logging
    • Error handling
    • Using the SDK
  • Tools
  • Pricing policy
  • Access management
  • Terraform reference
  • Monitoring metrics
  • Audit Trails events
  • Public materials
  • Release notes
  • FAQ

In this article:

  • Handler types
  • Synchronous handler
  • Asynchronous handler
  • Examples
  • HTTP request structure output
  • Using an asynchronous handler in Python 3.14
  1. Developing in Python
  2. Request handler

Request handler for a function in Python

Written by
Yandex Cloud
Updated at July 2, 2026
View in Markdown
  • Handler types
  • Synchronous handler
  • Asynchronous handler
  • Examples
    • HTTP request structure output
    • Using an asynchronous handler in Python 3.14

A request handler is a method used to process each Python function call. When creating a function version, you must set up an entry point for it, i.e., a path to the request handler in <file>.<function> format, where:

  • <file>: Name of the file with the function code (without .py), e.g., index. The code file must reside in the root directory. The file name must not contain any dots.
  • <function>: Name of the callable object in <file>, e.g., handler. When initializing the function, the runtime imports <file> and finds the callable object named <function> which runs on every function invocation.

Example of an entry point for a Python function: index.handler.

Note

At any given time, a single function instance processes only one request. This allows you to use global variables without the need to ensure data integrity control.

When calling the handler, the runtime provides the following arguments:

  1. Request body (the event parameter):

    • If the request body is a JSON document, it will be converted into dict using the json.loads method.
    • If the function was invoked with the ?integration=raw query parameter, the HTTP request body is provided to the function as is, i.e., unprocessed.
  2. Invocation context (the context parameter).

    The context provides all required information about the function version. The structure of this object is described in Python function invocation context.

Handler typesHandler types

A function supports both synchronous and asynchronous handlers.

Synchronous handlerSynchronous handler

To return the execution result, use the return statement or raise an exception using the raise statement. A synchronous function must return a result or raise an exception.

Asynchronous handlerAsynchronous handler

A handler can be an async def asynchronous function. In this case, you can use the following statements:

  • return: Returns the function response.
  • raise: Reports an error to the runtime.
  • await: Tracks the execution of asynchronous function invocations.

Note

The asyncio library is the only supported runtime for asynchronous functions.

In Python 3.14 and higher, asyncio.get_event_loop() no longer automatically creates an event loop, but results in RuntimeError. Use asyncio.get_running_loop() to manage asynchronous handlers. See this example.

For more information about the development process using async/await, see this article.

ExamplesExamples

HTTP request structure outputHTTP request structure output

The following function outputs the request structure and invocation context to both the execution log and function response:

import json


def handler(event, context):
    return {
        'statusCode': 200,
        'body': json.dumps(
            {
                'event': event,
                'context': context,
            }, 
            default=vars,
        ),
    }

Function invocation example:

curl \
  --data '{"hello": "world"}' \
  --header 'Content-Type: application/json' \
  https://functions.yandexcloud.net/<function_ID>?param=one

Result:

{
    "context": {
        "aws_request_id": "6e8356f9-489b-4c7b-8ba6-c8cd********",
        "deadline_ms": 1657713543198,
        "function_name": "d4eo2faf62**********",
        "function_version": "d4e3vrugh3**********",
        "invoked_function_arn": "d4eo2faf62**********",
        "log_group_name": "ckgjmanjlh**********",
        "log_stream_name": "d4e3vrugh3**********",
        "memory_limit_in_mb": 128,
        "request_id": "6e8356f9-489b-4c7b-8ba6-c8cd********",
        "token": {
            "access_token": "<IAM_token>",
            "expires_in": 42299,
            "token_type": "Bearer"
        }
    },
    "event": {
        "body": "{\"hello\": \"world\"}",
        "headers": {
            "Accept": "*/*",
            "Content-Length": "18",
            "Content-Type": "application/json",
            "Host": "functions.yandexcloud.net",
            "User-Agent": "curl/7.64.1",
            "X-Forwarded-For": "109.252.148.209",
            "X-Real-Remote-Address": "[109.252.148.209]:2816",
            "X-Request-Id": "6e8356f9-489b-4c7b-8ba6-c8cd********",
            "X-Trace-Id": "e9fe9b05-c1aa-4fb8-94d8-a514********"
        },
        "httpMethod": "POST",
        "isBase64Encoded": false,
        "multiValueHeaders": {
            "Accept": [
                "*/*"
            ],
            "Content-Length": [
                "18"
            ],
            "Content-Type": [
                "application/json"
            ],
            "Host": [
                "functions.yandexcloud.net"
            ],
            "User-Agent": [
                "curl/7.64.1"
            ],
            "X-Forwarded-For": [
                "109.252.148.209"
            ],
            "X-Real-Remote-Address": [
                "[109.252.148.209]:2816"
            ],
            "X-Request-Id": [
                "6e8356f9-489b-4c7b-8ba6-c8cd********"
            ],
            "X-Trace-Id": [
                "e9fe9b05-c1aa-4fb8-94d8-a514********"
            ]
        },
        "multiValueParams": {},
        "multiValueQueryStringParameters": {
            "param": [
                "one"
            ]
        },
        "params": {},
        "pathParams": {},
        "queryStringParameters": {
            "param": "one"
        },
        "requestContext": {
            "httpMethod": "POST",
            "identity": {
                "sourceIp": "109.252.148.209",
                "userAgent": "curl/7.64.1"
            },
            "requestId": "6e8356f9-489b-4c7b-8ba6-c8cd********",
            "requestTime": "13/Jul/2022:11:58:59 +0000",
            "requestTimeEpoch": 1657713539
        },
        "url": ""
    }
}

Using an asynchronous handler in Python 3.14Using an asynchronous handler in Python 3.14

The following function demonstrates how to use an asynchronous handler in Python 3.14 and higher, where explicit event loop management is required:

import asyncio
import json

def handler(event, context):
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    
    async def async_handler():
        current_loop = asyncio.get_running_loop()
        current_time = current_loop.time()
        
        return {
            'statusCode': 200,
            'body': json.dumps({
                'message': 'Async handler with explicit loop creation',
                'loop_time': current_time,
                'python_version': '3.14',
            })
        }
    
    return loop.run_until_complete(async_handler())

Function invocation example:

curl \
  --data '{"test": "asyncio"}' \
  --header 'Content-Type: application/json' \
  https://functions.yandexcloud.net/<function_ID>

Result:

{"message": "Async handler with explicit loop creation", "loop_time": 3.522407882, "python_version": "3.14"}

Was the article helpful?

Previous
Managing dependencies
Next
Invocation context
© 2026 Direct Cursus Technology L.L.C.