Advertisement
Guest User

Untitled

a guest
Jun 9th, 2021
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.66 KB | None | 0 0
  1. import logging
  2. import asyncio
  3. from typing import Dict, Optional
  4.  
  5. logging.basicConfig(level=logging.INFO,
  6.                     format="%(asctime)s [%(levelname)s] - %(filename)s (%(lineno)d string): %(message)s")
  7. logger = logging.getLogger(__name__)
  8.  
  9.  
  10. def check_iterations(timeout: str) -> Optional[int]: # Проверка на количество итераций
  11.     return int(timeout)
  12.  
  13.  
  14. # Первый пример:
  15.  
  16. async def send_message(message_text: str) -> None: # Отравка сообщения об успешном вызове функции
  17.     logger.info(f"SUCCESS: {message_text}")
  18.  
  19. t = send_message # Добавляем функцию по тегу
  20.  
  21. async def send_gather_command(message_text: str) -> None:
  22.     _, *parts = message_text.split(maxsplit=3)
  23.     if len(parts) < 3:
  24.         return logger.error("Недостаточно аргументов!")
  25.     iterations, command, args = parts
  26.     try:
  27.         iterations = check_iterations(iterations) # Получаем числовое значение или вызываем ValueError
  28.         command = command.strip("!").lower() # !g == g == G
  29.         func = globals()[command] # Получаем функцию по тегу или вызываем KeyError
  30.         message_text = f"{command} {''.join(args)}" # Текст для передачи вызываемой функции
  31.         logger.info(message_text)
  32.         tasks = []
  33.         for _ in range(iterations):
  34.             task = asyncio.create_task(func(message_text))
  35.             tasks.append(task)
  36.         await asyncio.gather(*tasks) # Запуск задач, !g 2 !t ABC - два раза вызвать функцию send_message с аргументом ABC
  37.     except ValueError:
  38.         return logger.error("Некорректное количество итераций")
  39.     except KeyError:
  40.         logger.error("Команда отсутствует в списке")
  41.  
  42. g = send_gather_command # Добавляем функцию по тегу
  43.  
  44. asyncio.run(send_gather_command("!g 2 !g 2 !t ABC")) # Запуска первой функции
  45.  
  46. # Второй пример:
  47.  
  48. async def send_message(message: Dict[str, str]) -> None:
  49.     logger.info(f"SUCCESS: {message['text']}")
  50.  
  51. t = send_message
  52.  
  53. async def send_gather_command_dict(message: Dict[str, str]) -> None:
  54.     _, *parts = message['text'].split(maxsplit=3)
  55.     if len(parts) < 3:
  56.         return logger.error("Недостаточно аргументов!")
  57.     iterations, command, args = parts
  58.     try:
  59.         iterations = check_iterations(iterations) # Получаем числовое значение или вызываем ValueError
  60.         command = command.strip("!").lower() # !g == g == G
  61.         func = globals()[command] # Получаем функцию по тегу или вызываем KeyError
  62.         message['text'] = f"{command} {''.join(args)}" # Текст для передачи вызываемой функции
  63.         logger.info(message['text'])
  64.         tasks = []
  65.         for _ in range(iterations):
  66.             task = asyncio.create_task(func(message))
  67.             tasks.append(task)
  68.         await asyncio.gather(*tasks) # Запуск задач, !g 2 !t ABC - два раза вызвать функцию send_message с аргументом ABC
  69.     except ValueError:
  70.         return logger.error("Некорректное количество итераций")
  71.     except KeyError:
  72.         logger.error("Команда отсутствует в списке")
  73.  
  74. g = send_gather_command_dict
  75.  
  76. asyncio.run(send_gather_command_dict({"text": "!g 2 !g 2 !t ABC"})) # Запуска второй функции
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement