cengal.parallel_execution.coroutines.coro_tools.terminate_tasks.versions.v_0.terminate_tasks

  1#!/usr/bin/env python
  2# coding=utf-8
  3
  4# Copyright © 2012-2024 ButenkoMS. All rights reserved. Contacts: <gtalk@butenkoms.space>
  5# 
  6# Licensed under the Apache License, Version 2.0 (the "License");
  7# you may not use this file except in compliance with the License.
  8# You may obtain a copy of the License at
  9# 
 10#     http://www.apache.org/licenses/LICENSE-2.0
 11# 
 12# Unless required by applicable law or agreed to in writing, software
 13# distributed under the License is distributed on an "AS IS" BASIS,
 14# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 15# See the License for the specific language governing permissions and
 16# limitations under the License.
 17
 18
 19__all__ = [
 20    'aterminate_tasks_explicit',
 21    'aterminate_tasks_implicit',
 22    'aterminate_tasks',
 23    'aterminate_tasks_im',
 24    'terminate_tasks_explicit',
 25    'terminate_tasks_implicit',
 26    'terminate_tasks',
 27    'terminate_tasks_im',
 28]
 29
 30
 31"""
 32Module Docstring
 33Docstrings: http://www.python.org/dev/peps/pep-0257/
 34"""
 35
 36__author__ = "ButenkoMS <gtalk@butenkoms.space>"
 37__copyright__ = "Copyright © 2012-2024 ButenkoMS. All rights reserved. Contacts: <gtalk@butenkoms.space>"
 38__credits__ = ["ButenkoMS <gtalk@butenkoms.space>", ]
 39__license__ = "Apache License, Version 2.0"
 40__version__ = "4.4.1"
 41__maintainer__ = "ButenkoMS <gtalk@butenkoms.space>"
 42__email__ = "gtalk@butenkoms.space"
 43# __status__ = "Prototype"
 44__status__ = "Development"
 45# __status__ = "Production"
 46
 47
 48from cengal.parallel_execution.coroutines.coro_scheduler import Interface, current_interface
 49from cengal.parallel_execution.coroutines.coro_standard_services.put_coro import Task
 50from cengal.parallel_execution.coroutines.coro_standard_services.put_coro_list import PutCoroList, PSCP
 51from cengal.parallel_execution.coroutines.coro_standard_services.run_coro import RunCoro
 52from cengal.parallel_execution.coroutines.coro_standard_services.kill_coro_list import KillCoroList, KillSingleCoroParams
 53from cengal.parallel_execution.coroutines.coro_tools.wait_tasks import GracefulTerminationSettings, \
 54    atask_graceful_destroyer, await_tasks_explicit
 55
 56from typing import Optional, List, Callable
 57
 58
 59async def aterminate_tasks_explicit(
 60        i: Interface, 
 61        tasks: List[Task], 
 62        tree: bool = False,
 63        graceful_termination_settings: Optional[GracefulTerminationSettings] = None,
 64        wait_for_termination: bool = False, 
 65        ) -> bool:
 66    if not tasks:
 67        return False
 68    
 69    if graceful_termination_settings is None:
 70        termination_tasks_params: List[KillSingleCoroParams] = list([KillSingleCoroParams(task.coro_id, tree) for task in tasks if not task.done])
 71        if not termination_tasks_params:
 72            return False
 73        
 74        i(KillCoroList, termination_tasks)
 75    else:
 76        termination_tasks_params: List[PSCP] = [PSCP(atask_graceful_destroyer, task, tree, graceful_termination_settings) for task in tasks if not task.done]
 77        if not termination_tasks_params:
 78            return False
 79        
 80        termination_tasks: List[Task] = await i(PutCoroList, termination_tasks_params, True)
 81        if wait_for_termination:
 82            await await_tasks_explicit(i, termination_tasks, False, None, None, False, False, False, False)
 83    
 84    return True
 85
 86
 87async def aterminate_tasks_implicit(
 88        tasks: List[Task], 
 89        tree: bool = False,
 90        graceful_termination_settings: Optional[GracefulTerminationSettings] = None,
 91        wait_for_termination: bool = False, 
 92        ) -> bool:
 93    i: Interface = current_interface()
 94    return await aterminate_tasks_explicit(
 95        i, 
 96        tasks, 
 97        tree, 
 98        graceful_termination_settings, 
 99        wait_for_termination, 
100        )
101
102
103aterminate_tasks: Callable = aterminate_tasks_explicit
104aterminate_tasks_im: Callable = aterminate_tasks_implicit
105
106
107def terminate_tasks_explicit(
108        i: Interface, 
109        tasks: List[Task], 
110        tree: bool = False,
111        graceful_termination_settings: Optional[GracefulTerminationSettings] = None,
112        wait_for_termination: bool = False, 
113        ) -> bool:
114    i(RunCoro, aterminate_tasks_explicit,
115        tasks, 
116        tree, 
117        graceful_termination_settings, 
118        wait_for_termination, 
119        )
120
121
122def terminate_tasks_implicit(
123        tasks: List[Task], 
124        tree: bool = False,
125        graceful_termination_settings: Optional[GracefulTerminationSettings] = None,
126        wait_for_termination: bool = False, 
127        ) -> bool:
128    i: Interface = current_interface()
129    return terminate_tasks_explicit(
130        i, 
131        tasks, 
132        tree, 
133        graceful_termination_settings, 
134        wait_for_termination, 
135        )
136
137
138terminate_tasks: Callable = terminate_tasks_explicit
139terminate_tasks_im: Callable = terminate_tasks_implicit
async def aterminate_tasks_explicit( i: cengal.parallel_execution.coroutines.coro_scheduler.versions.v_0.coro_scheduler.Interface, tasks: List[cengal.parallel_execution.coroutines.coro_standard_services.put_coro.versions.v_0.put_coro.Task], tree: bool = False, graceful_termination_settings: Union[cengal.parallel_execution.coroutines.coro_tools.wait_tasks.versions.v_0.wait_tasks.GracefulTerminationSettings, NoneType] = None, wait_for_termination: bool = False) -> bool:
60async def aterminate_tasks_explicit(
61        i: Interface, 
62        tasks: List[Task], 
63        tree: bool = False,
64        graceful_termination_settings: Optional[GracefulTerminationSettings] = None,
65        wait_for_termination: bool = False, 
66        ) -> bool:
67    if not tasks:
68        return False
69    
70    if graceful_termination_settings is None:
71        termination_tasks_params: List[KillSingleCoroParams] = list([KillSingleCoroParams(task.coro_id, tree) for task in tasks if not task.done])
72        if not termination_tasks_params:
73            return False
74        
75        i(KillCoroList, termination_tasks)
76    else:
77        termination_tasks_params: List[PSCP] = [PSCP(atask_graceful_destroyer, task, tree, graceful_termination_settings) for task in tasks if not task.done]
78        if not termination_tasks_params:
79            return False
80        
81        termination_tasks: List[Task] = await i(PutCoroList, termination_tasks_params, True)
82        if wait_for_termination:
83            await await_tasks_explicit(i, termination_tasks, False, None, None, False, False, False, False)
84    
85    return True
async def aterminate_tasks_implicit( tasks: List[cengal.parallel_execution.coroutines.coro_standard_services.put_coro.versions.v_0.put_coro.Task], tree: bool = False, graceful_termination_settings: Union[cengal.parallel_execution.coroutines.coro_tools.wait_tasks.versions.v_0.wait_tasks.GracefulTerminationSettings, NoneType] = None, wait_for_termination: bool = False) -> bool:
 88async def aterminate_tasks_implicit(
 89        tasks: List[Task], 
 90        tree: bool = False,
 91        graceful_termination_settings: Optional[GracefulTerminationSettings] = None,
 92        wait_for_termination: bool = False, 
 93        ) -> bool:
 94    i: Interface = current_interface()
 95    return await aterminate_tasks_explicit(
 96        i, 
 97        tasks, 
 98        tree, 
 99        graceful_termination_settings, 
100        wait_for_termination, 
101        )
async def aterminate_tasks( i: cengal.parallel_execution.coroutines.coro_scheduler.versions.v_0.coro_scheduler.Interface, tasks: List[cengal.parallel_execution.coroutines.coro_standard_services.put_coro.versions.v_0.put_coro.Task], tree: bool = False, graceful_termination_settings: Union[cengal.parallel_execution.coroutines.coro_tools.wait_tasks.versions.v_0.wait_tasks.GracefulTerminationSettings, NoneType] = None, wait_for_termination: bool = False) -> bool:
60async def aterminate_tasks_explicit(
61        i: Interface, 
62        tasks: List[Task], 
63        tree: bool = False,
64        graceful_termination_settings: Optional[GracefulTerminationSettings] = None,
65        wait_for_termination: bool = False, 
66        ) -> bool:
67    if not tasks:
68        return False
69    
70    if graceful_termination_settings is None:
71        termination_tasks_params: List[KillSingleCoroParams] = list([KillSingleCoroParams(task.coro_id, tree) for task in tasks if not task.done])
72        if not termination_tasks_params:
73            return False
74        
75        i(KillCoroList, termination_tasks)
76    else:
77        termination_tasks_params: List[PSCP] = [PSCP(atask_graceful_destroyer, task, tree, graceful_termination_settings) for task in tasks if not task.done]
78        if not termination_tasks_params:
79            return False
80        
81        termination_tasks: List[Task] = await i(PutCoroList, termination_tasks_params, True)
82        if wait_for_termination:
83            await await_tasks_explicit(i, termination_tasks, False, None, None, False, False, False, False)
84    
85    return True
async def aterminate_tasks_im( tasks: List[cengal.parallel_execution.coroutines.coro_standard_services.put_coro.versions.v_0.put_coro.Task], tree: bool = False, graceful_termination_settings: Union[cengal.parallel_execution.coroutines.coro_tools.wait_tasks.versions.v_0.wait_tasks.GracefulTerminationSettings, NoneType] = None, wait_for_termination: bool = False) -> bool:
 88async def aterminate_tasks_implicit(
 89        tasks: List[Task], 
 90        tree: bool = False,
 91        graceful_termination_settings: Optional[GracefulTerminationSettings] = None,
 92        wait_for_termination: bool = False, 
 93        ) -> bool:
 94    i: Interface = current_interface()
 95    return await aterminate_tasks_explicit(
 96        i, 
 97        tasks, 
 98        tree, 
 99        graceful_termination_settings, 
100        wait_for_termination, 
101        )
def terminate_tasks_explicit( i: cengal.parallel_execution.coroutines.coro_scheduler.versions.v_0.coro_scheduler.Interface, tasks: List[cengal.parallel_execution.coroutines.coro_standard_services.put_coro.versions.v_0.put_coro.Task], tree: bool = False, graceful_termination_settings: Union[cengal.parallel_execution.coroutines.coro_tools.wait_tasks.versions.v_0.wait_tasks.GracefulTerminationSettings, NoneType] = None, wait_for_termination: bool = False) -> bool:
108def terminate_tasks_explicit(
109        i: Interface, 
110        tasks: List[Task], 
111        tree: bool = False,
112        graceful_termination_settings: Optional[GracefulTerminationSettings] = None,
113        wait_for_termination: bool = False, 
114        ) -> bool:
115    i(RunCoro, aterminate_tasks_explicit,
116        tasks, 
117        tree, 
118        graceful_termination_settings, 
119        wait_for_termination, 
120        )
def terminate_tasks_implicit( tasks: List[cengal.parallel_execution.coroutines.coro_standard_services.put_coro.versions.v_0.put_coro.Task], tree: bool = False, graceful_termination_settings: Union[cengal.parallel_execution.coroutines.coro_tools.wait_tasks.versions.v_0.wait_tasks.GracefulTerminationSettings, NoneType] = None, wait_for_termination: bool = False) -> bool:
123def terminate_tasks_implicit(
124        tasks: List[Task], 
125        tree: bool = False,
126        graceful_termination_settings: Optional[GracefulTerminationSettings] = None,
127        wait_for_termination: bool = False, 
128        ) -> bool:
129    i: Interface = current_interface()
130    return terminate_tasks_explicit(
131        i, 
132        tasks, 
133        tree, 
134        graceful_termination_settings, 
135        wait_for_termination, 
136        )
def terminate_tasks( i: cengal.parallel_execution.coroutines.coro_scheduler.versions.v_0.coro_scheduler.Interface, tasks: List[cengal.parallel_execution.coroutines.coro_standard_services.put_coro.versions.v_0.put_coro.Task], tree: bool = False, graceful_termination_settings: Union[cengal.parallel_execution.coroutines.coro_tools.wait_tasks.versions.v_0.wait_tasks.GracefulTerminationSettings, NoneType] = None, wait_for_termination: bool = False) -> bool:
108def terminate_tasks_explicit(
109        i: Interface, 
110        tasks: List[Task], 
111        tree: bool = False,
112        graceful_termination_settings: Optional[GracefulTerminationSettings] = None,
113        wait_for_termination: bool = False, 
114        ) -> bool:
115    i(RunCoro, aterminate_tasks_explicit,
116        tasks, 
117        tree, 
118        graceful_termination_settings, 
119        wait_for_termination, 
120        )
def terminate_tasks_im( tasks: List[cengal.parallel_execution.coroutines.coro_standard_services.put_coro.versions.v_0.put_coro.Task], tree: bool = False, graceful_termination_settings: Union[cengal.parallel_execution.coroutines.coro_tools.wait_tasks.versions.v_0.wait_tasks.GracefulTerminationSettings, NoneType] = None, wait_for_termination: bool = False) -> bool:
123def terminate_tasks_implicit(
124        tasks: List[Task], 
125        tree: bool = False,
126        graceful_termination_settings: Optional[GracefulTerminationSettings] = None,
127        wait_for_termination: bool = False, 
128        ) -> bool:
129    i: Interface = current_interface()
130    return terminate_tasks_explicit(
131        i, 
132        tasks, 
133        tree, 
134        graceful_termination_settings, 
135        wait_for_termination, 
136        )