modal 1.2.3.dev2__tar.gz → 1.2.3.dev3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/PKG-INFO +1 -1
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/async_utils.py +15 -5
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/client.pyi +2 -2
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/functions.pyi +6 -6
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_version/__init__.py +1 -1
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/LICENSE +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/README.md +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/__init__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/__main__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_billing.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_clustered_functions.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_clustered_functions.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_container_entrypoint.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_functions.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_grpc_client.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_ipython.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_load_context.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_location.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_object.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_output.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_partial_function.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_pty.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_resolver.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_resources.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_runtime/__init__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_runtime/asgi.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_runtime/execution_context.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_runtime/telemetry.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_serialization.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_traceback.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_tunnel.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_tunnel.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_type_manager.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/__init__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/app_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/blob_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/deprecation.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/docker_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/function_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/git_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/hash_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/http_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/logger.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/mount_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/name_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/package_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/shell_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/task_command_router_client.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_utils/time_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_vendor/__init__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_vendor/tblib.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/_watcher.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/app.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/app.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/billing.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/builder/2023.12.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/builder/2024.04.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/builder/2024.10.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/builder/2025.06.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/builder/README.md +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/builder/base-images.json +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/call_graph.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/__init__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/_download.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/_traceback.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/app.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/cluster.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/config.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/container.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/dict.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/entry_point.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/environment.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/import_refs.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/launch.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/network_file_system.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/profile.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/programs/__init__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/programs/launch_instance_ssh.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/programs/run_marimo.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/programs/vscode.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/queues.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/run.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/secret.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/token.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cli/volume.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/client.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cls.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/cls.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/config.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/container_process.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/container_process.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/dict.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/dict.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/environments.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/environments.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/exception.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/experimental/__init__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/experimental/flash.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/experimental/flash.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/experimental/ipython.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/file_io.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/file_io.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/file_pattern_matcher.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/functions.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/gpu.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/image.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/image.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/io_streams.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/io_streams.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/mount.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/mount.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/network_file_system.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/network_file_system.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/object.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/object.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/output.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/parallel_map.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/parallel_map.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/partial_function.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/partial_function.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/proxy.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/proxy.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/py.typed +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/queue.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/queue.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/retries.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/runner.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/runner.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/running_app.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/sandbox.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/sandbox.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/schedule.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/scheduler_placement.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/secret.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/secret.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/serving.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/serving.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/snapshot.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/snapshot.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/stream_type.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/token_flow.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/token_flow.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/volume.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal/volume.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal.egg-info/requires.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal.egg-info/top_level.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_docs/__init__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_proto/__init__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_proto/api.proto +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_proto/api_grpc.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_proto/api_pb2.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_proto/api_pb2.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_proto/py.typed +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_proto/sandbox_router.proto +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_proto/sandbox_router_grpc.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_proto/sandbox_router_pb2.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_proto/sandbox_router_pb2.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_proto/sandbox_router_pb2_grpc.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_proto/sandbox_router_pb2_grpc.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_proto/task_command_router.proto +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/modal_version/__main__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/pyproject.toml +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev3}/setup.cfg +0 -0
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
# Copyright Modal Labs 2022
|
|
2
2
|
import asyncio
|
|
3
3
|
import concurrent.futures
|
|
4
|
+
import contextlib
|
|
4
5
|
import functools
|
|
5
6
|
import inspect
|
|
6
7
|
import itertools
|
|
7
8
|
import sys
|
|
8
9
|
import time
|
|
9
10
|
import typing
|
|
11
|
+
import warnings
|
|
10
12
|
from collections.abc import AsyncGenerator, AsyncIterable, Awaitable, Iterable, Iterator
|
|
11
13
|
from contextlib import asynccontextmanager
|
|
12
14
|
from dataclasses import dataclass
|
|
@@ -134,7 +136,8 @@ class TaskContext:
|
|
|
134
136
|
_loops: set[asyncio.Task]
|
|
135
137
|
|
|
136
138
|
def __init__(self, grace: Optional[float] = None):
|
|
137
|
-
self._grace = grace
|
|
139
|
+
self._grace = grace # grace is the time we want for tasks to finish before cancelling them
|
|
140
|
+
self._cancellation_grace: float = 1.0 # extra graceperiod for the cancellation itself to "bubble up"
|
|
138
141
|
self._loops = set()
|
|
139
142
|
|
|
140
143
|
async def start(self):
|
|
@@ -166,22 +169,29 @@ class TaskContext:
|
|
|
166
169
|
# still needs to be handled
|
|
167
170
|
# (https://stackoverflow.com/a/63356323/2475114)
|
|
168
171
|
if gather_future:
|
|
169
|
-
|
|
172
|
+
with contextlib.suppress(asyncio.CancelledError):
|
|
170
173
|
await gather_future
|
|
171
|
-
except asyncio.CancelledError:
|
|
172
|
-
pass
|
|
173
174
|
|
|
175
|
+
cancelled_tasks: list[asyncio.Task] = []
|
|
174
176
|
for task in self._tasks:
|
|
175
177
|
if task.done() and not task.cancelled():
|
|
176
178
|
# Raise any exceptions if they happened.
|
|
177
179
|
# Only tasks without a done_callback will still be present in self._tasks
|
|
178
180
|
task.result()
|
|
179
181
|
|
|
180
|
-
if task.done()
|
|
182
|
+
if task.done():
|
|
181
183
|
continue
|
|
182
184
|
|
|
183
185
|
# Cancel any remaining unfinished tasks.
|
|
184
186
|
task.cancel()
|
|
187
|
+
cancelled_tasks.append(task)
|
|
188
|
+
|
|
189
|
+
cancellation_gather = asyncio.gather(*cancelled_tasks, return_exceptions=True)
|
|
190
|
+
try:
|
|
191
|
+
await asyncio.wait_for(cancellation_gather, timeout=self._cancellation_grace)
|
|
192
|
+
except asyncio.TimeoutError:
|
|
193
|
+
warnings.warn(f"Internal warning: Tasks did not cancel in a timely manner: {cancelled_tasks}")
|
|
194
|
+
|
|
185
195
|
await asyncio.sleep(0) # wake up coroutines waiting for cancellations
|
|
186
196
|
|
|
187
197
|
async def __aexit__(self, exc_type, value, tb):
|
|
@@ -33,7 +33,7 @@ class _Client:
|
|
|
33
33
|
server_url: str,
|
|
34
34
|
client_type: int,
|
|
35
35
|
credentials: typing.Optional[tuple[str, str]],
|
|
36
|
-
version: str = "1.2.3.
|
|
36
|
+
version: str = "1.2.3.dev3",
|
|
37
37
|
):
|
|
38
38
|
"""mdmd:hidden
|
|
39
39
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -164,7 +164,7 @@ class Client:
|
|
|
164
164
|
server_url: str,
|
|
165
165
|
client_type: int,
|
|
166
166
|
credentials: typing.Optional[tuple[str, str]],
|
|
167
|
-
version: str = "1.2.3.
|
|
167
|
+
version: str = "1.2.3.dev3",
|
|
168
168
|
):
|
|
169
169
|
"""mdmd:hidden
|
|
170
170
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -408,7 +408,7 @@ class Function(
|
|
|
408
408
|
|
|
409
409
|
_call_generator: ___call_generator_spec[typing_extensions.Self]
|
|
410
410
|
|
|
411
|
-
class __remote_spec(typing_extensions.Protocol[
|
|
411
|
+
class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
|
|
412
412
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
|
|
413
413
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
|
414
414
|
...
|
|
@@ -417,7 +417,7 @@ class Function(
|
|
|
417
417
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
|
418
418
|
...
|
|
419
419
|
|
|
420
|
-
remote: __remote_spec[modal._functions.
|
|
420
|
+
remote: __remote_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
|
|
421
421
|
|
|
422
422
|
class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
423
423
|
def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
|
|
@@ -444,7 +444,7 @@ class Function(
|
|
|
444
444
|
"""
|
|
445
445
|
...
|
|
446
446
|
|
|
447
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
|
447
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
|
|
448
448
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
449
449
|
"""[Experimental] Calls the function with the given arguments, without waiting for the results.
|
|
450
450
|
|
|
@@ -468,7 +468,7 @@ class Function(
|
|
|
468
468
|
...
|
|
469
469
|
|
|
470
470
|
_experimental_spawn: ___experimental_spawn_spec[
|
|
471
|
-
modal._functions.
|
|
471
|
+
modal._functions.P, modal._functions.ReturnType, typing_extensions.Self
|
|
472
472
|
]
|
|
473
473
|
|
|
474
474
|
class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
|
|
@@ -477,7 +477,7 @@ class Function(
|
|
|
477
477
|
|
|
478
478
|
_spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
|
|
479
479
|
|
|
480
|
-
class __spawn_spec(typing_extensions.Protocol[
|
|
480
|
+
class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
|
|
481
481
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
482
482
|
"""Calls the function with the given arguments, without waiting for the results.
|
|
483
483
|
|
|
@@ -498,7 +498,7 @@ class Function(
|
|
|
498
498
|
"""
|
|
499
499
|
...
|
|
500
500
|
|
|
501
|
-
spawn: __spawn_spec[modal._functions.
|
|
501
|
+
spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
|
|
502
502
|
|
|
503
503
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
|
|
504
504
|
"""Return the inner Python object wrapped by this Modal Function."""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|