diff --git a/eng/pack/templates/macos_64_env_gen.yml b/eng/pack/templates/macos_64_env_gen.yml index 68f04f599..b0020620e 100644 --- a/eng/pack/templates/macos_64_env_gen.yml +++ b/eng/pack/templates/macos_64_env_gen.yml @@ -86,6 +86,7 @@ steps: !python/** !tests/** !setuptools*/** + !uvloop/** !_distutils_hack/** !distutils-precedence.pth !pkg_resources/** diff --git a/eng/pack/templates/nix_arm64_env_gen.yml b/eng/pack/templates/nix_arm64_env_gen.yml index 0d57c78f6..5e90e902f 100644 --- a/eng/pack/templates/nix_arm64_env_gen.yml +++ b/eng/pack/templates/nix_arm64_env_gen.yml @@ -92,6 +92,7 @@ steps: !python/** !tests/** !setuptools*/** + !uvloop/** !_distutils_hack/** !distutils-precedence.pth !pkg_resources/** diff --git a/eng/pack/templates/nix_env_gen.yml b/eng/pack/templates/nix_env_gen.yml index db9f54f56..dcabaff43 100644 --- a/eng/pack/templates/nix_env_gen.yml +++ b/eng/pack/templates/nix_env_gen.yml @@ -86,6 +86,7 @@ steps: !python/** !tests/** !setuptools*/** + !uvloop/** !_distutils_hack/** !distutils-precedence.pth !pkg_resources/** diff --git a/workers/azure_functions_worker/main.py b/workers/azure_functions_worker/main.py index 130e0e9ea..2bd5ddd3b 100644 --- a/workers/azure_functions_worker/main.py +++ b/workers/azure_functions_worker/main.py @@ -3,6 +3,12 @@ """Main entrypoint.""" import argparse +import asyncio +try: + import uvloop + asyncio.set_event_loop_policy(uvloop.EventLoopPolicy()) +except Exception: + pass def parse_args(): @@ -45,8 +51,6 @@ def main(): DependencyManager.initialize() DependencyManager.use_worker_dependencies() - import asyncio - from . import logging from .logging import error_logger, format_exception, logger @@ -56,6 +60,7 @@ def main(): logger.info('Starting Azure Functions Python Worker.') logger.info('Worker ID: %s, Request ID: %s, Host Address: %s:%s', args.worker_id, args.request_id, args.host, args.port) + logger.debug('Using event loop: %s', type(asyncio.get_event_loop())) try: return asyncio.run(start_async( diff --git a/workers/azure_functions_worker/utils/dependency.py b/workers/azure_functions_worker/utils/dependency.py index 76d4259be..3559cef98 100644 --- a/workers/azure_functions_worker/utils/dependency.py +++ b/workers/azure_functions_worker/utils/dependency.py @@ -95,7 +95,7 @@ def should_load_cx_dependencies(cls): ) def use_worker_dependencies(cls): """Switch the sys.path and ensure the worker imports are loaded from - Worker's dependenciess. + Worker's dependencies. This will not affect already imported namespaces, but will clear out the module cache and ensure the upcoming modules are loaded from diff --git a/workers/proxy_worker/start_worker.py b/workers/proxy_worker/start_worker.py index 001e54f95..46a1cb63e 100644 --- a/workers/proxy_worker/start_worker.py +++ b/workers/proxy_worker/start_worker.py @@ -4,6 +4,12 @@ import argparse import traceback +import asyncio +try: + import uvloop + asyncio.set_event_loop_policy(uvloop.EventLoopPolicy()) +except Exception: + pass _GRPC_CONNECTION_TIMEOUT = 5.0 @@ -41,8 +47,6 @@ def start(): DependencyManager.initialize() DependencyManager.use_worker_dependencies() - import asyncio - from . import logging from .logging import error_logger, logger @@ -53,6 +57,7 @@ def start(): logger.info( 'Starting proxy worker. Worker ID: %s, Request ID: %s, Host Address: %s:%s', args.worker_id, args.request_id, args.host, args.port) + logger.debug('Using event loop: %s', type(asyncio.get_event_loop())) try: return asyncio.run(start_async( diff --git a/workers/pyproject.toml b/workers/pyproject.toml index d5740d69d..1c50017a9 100644 --- a/workers/pyproject.toml +++ b/workers/pyproject.toml @@ -39,6 +39,7 @@ dependencies = [ "grpcio~=1.43.0; python_version == '3.7'", "grpcio ~=1.59.0; python_version >= '3.8' and python_version < '3.13'", "grpcio~=1.70.0; python_version >= '3.13'", + "uvloop~=0.21.0; python_version >= '3.13'", "azurefunctions-extensions-base; python_version >= '3.8'", "azure-functions-runtime==1.0.0a3; python_version >= '3.13'", "azure-functions-runtime-v1==1.0.0a2; python_version >= '3.13'"