modAL 1.2.3.dev2__tar.gz → 1.2.3.dev4__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.dev4}/PKG-INFO +1 -1
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/async_utils.py +15 -5
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/client.pyi +2 -2
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_version/__init__.py +1 -1
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/LICENSE +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/README.md +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/__init__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/__main__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_billing.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_clustered_functions.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_clustered_functions.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_container_entrypoint.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_functions.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_grpc_client.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_ipython.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_load_context.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_location.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_object.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_output.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_partial_function.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_pty.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_resolver.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_resources.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_runtime/__init__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_runtime/asgi.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_runtime/execution_context.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_runtime/telemetry.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_serialization.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_traceback.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_tunnel.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_tunnel.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_type_manager.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/__init__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/app_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/blob_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/deprecation.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/docker_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/function_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/git_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/hash_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/http_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/logger.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/mount_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/name_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/package_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/shell_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/task_command_router_client.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_utils/time_utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_vendor/__init__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_vendor/tblib.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/_watcher.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/app.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/app.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/billing.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/builder/2023.12.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/builder/2024.04.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/builder/2024.10.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/builder/2025.06.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/builder/README.md +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/builder/base-images.json +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/call_graph.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/__init__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/_download.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/_traceback.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/app.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/cluster.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/config.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/container.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/dict.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/entry_point.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/environment.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/import_refs.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/launch.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/network_file_system.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/profile.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/programs/__init__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/programs/launch_instance_ssh.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/programs/run_marimo.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/programs/vscode.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/queues.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/run.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/secret.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/token.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/utils.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cli/volume.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/client.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cls.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/cls.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/config.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/container_process.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/container_process.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/dict.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/dict.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/environments.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/environments.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/exception.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/experimental/__init__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/experimental/flash.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/experimental/flash.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/experimental/ipython.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/file_io.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/file_io.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/file_pattern_matcher.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/functions.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/functions.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/gpu.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/image.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/image.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/io_streams.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/io_streams.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/mount.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/mount.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/network_file_system.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/network_file_system.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/object.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/object.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/output.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/parallel_map.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/parallel_map.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/partial_function.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/partial_function.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/proxy.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/proxy.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/py.typed +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/queue.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/queue.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/retries.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/runner.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/runner.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/running_app.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/sandbox.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/sandbox.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/schedule.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/scheduler_placement.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/secret.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/secret.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/serving.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/serving.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/snapshot.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/snapshot.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/stream_type.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/token_flow.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/token_flow.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/volume.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal/volume.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal.egg-info/requires.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal.egg-info/top_level.txt +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_docs/__init__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_proto/__init__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_proto/api.proto +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_proto/api_grpc.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_proto/api_pb2.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_proto/api_pb2.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_proto/py.typed +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_proto/sandbox_router.proto +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_proto/sandbox_router_grpc.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_proto/sandbox_router_pb2.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_proto/sandbox_router_pb2.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_proto/sandbox_router_pb2_grpc.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_proto/sandbox_router_pb2_grpc.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_proto/task_command_router.proto +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/modal_version/__main__.py +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/pyproject.toml +0 -0
- {modal-1.2.3.dev2 → modal-1.2.3.dev4}/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.dev4",
|
|
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.dev4",
|
|
168
168
|
):
|
|
169
169
|
"""mdmd:hidden
|
|
170
170
|
The Modal client object is not intended to be instantiated directly by users.
|
|
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
|
|
File without changes
|