Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import logging
- import asyncio
- from typing import Dict, Optional
- logging.basicConfig(level=logging.INFO,
- format="%(asctime)s [%(levelname)s] - %(filename)s (%(lineno)d string): %(message)s")
- logger = logging.getLogger(__name__)
- def check_iterations(timeout: str) -> Optional[int]: # Проверка на количество итераций
- return int(timeout)
- # Первый пример:
- async def send_message(message_text: str) -> None: # Отравка сообщения об успешном вызове функции
- logger.info(f"SUCCESS: {message_text}")
- t = send_message # Добавляем функцию по тегу
- async def send_gather_command(message_text: str) -> None:
- _, *parts = message_text.split(maxsplit=3)
- if len(parts) < 3:
- return logger.error("Недостаточно аргументов!")
- iterations, command, args = parts
- try:
- iterations = check_iterations(iterations) # Получаем числовое значение или вызываем ValueError
- command = command.strip("!").lower() # !g == g == G
- func = globals()[command] # Получаем функцию по тегу или вызываем KeyError
- message_text = f"{command} {''.join(args)}" # Текст для передачи вызываемой функции
- logger.info(message_text)
- tasks = []
- for _ in range(iterations):
- task = asyncio.create_task(func(message_text))
- tasks.append(task)
- await asyncio.gather(*tasks) # Запуск задач, !g 2 !t ABC - два раза вызвать функцию send_message с аргументом ABC
- except ValueError:
- return logger.error("Некорректное количество итераций")
- except KeyError:
- logger.error("Команда отсутствует в списке")
- g = send_gather_command # Добавляем функцию по тегу
- asyncio.run(send_gather_command("!g 2 !g 2 !t ABC")) # Запуска первой функции
- # Второй пример:
- async def send_message(message: Dict[str, str]) -> None:
- logger.info(f"SUCCESS: {message['text']}")
- t = send_message
- async def send_gather_command_dict(message: Dict[str, str]) -> None:
- _, *parts = message['text'].split(maxsplit=3)
- if len(parts) < 3:
- return logger.error("Недостаточно аргументов!")
- iterations, command, args = parts
- try:
- iterations = check_iterations(iterations) # Получаем числовое значение или вызываем ValueError
- command = command.strip("!").lower() # !g == g == G
- func = globals()[command] # Получаем функцию по тегу или вызываем KeyError
- message['text'] = f"{command} {''.join(args)}" # Текст для передачи вызываемой функции
- logger.info(message['text'])
- tasks = []
- for _ in range(iterations):
- task = asyncio.create_task(func(message))
- tasks.append(task)
- await asyncio.gather(*tasks) # Запуск задач, !g 2 !t ABC - два раза вызвать функцию send_message с аргументом ABC
- except ValueError:
- return logger.error("Некорректное количество итераций")
- except KeyError:
- logger.error("Команда отсутствует в списке")
- g = send_gather_command_dict
- asyncio.run(send_gather_command_dict({"text": "!g 2 !g 2 !t ABC"})) # Запуска второй функции
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement