Создаю СМС сервис на Flask ожидающий на вход json, от main-сервиса после чего сервис обращается по api к железке EASTAR TG800 для отправки СМС. Проблема в том что обращаться к АПИ можно раз в 10 секунд по одному порту, а ответ main-сервису необходимо дать сразу. Написал класс для общения с железкой (после разбора json'а вызываю метод send_message):
class SMS:
def __init__(self, x):
self.port = {}
self.port.update(x)
async def send_message(self, destination, text):
for key in self.port:
if self.port[key]:
text_of_send = text.replace(' ', '+')
url = ("http://{host}/cgi/WebCGI?1500101=account={login}&password={passw}&" +
"port={port}&destination={dest}&content={txt}").format(
host=host,
login=login,
passw=passw,
port=key,
dest=destination,
txt=text_of_send)
# requests.get(url)
print(url)
# self.count_TF(key)
await self.count_TF(self, key)
return key
print('ничего не активно')
time.sleep(5)
k = await self.send_message(destination, text)
return k
async def count_TF(self, key):
self.port[key] = False
print(f'start {key}')
# time.sleep(10)
await asyncio.sleep(10)
print(f'stop {key}')
self.port[key] = True
Моя идея заключается в том, чтобы хранить в свойствах словарь port, где хранятся номера портов в виде ключей и True или False в виду значений этих ключей, соответственно если условный 1й порт True - по нему можно отправить сообщение, если False - нельзя. После отправки сообщения по условному порту 1, значение соответствующего ключа меняется на False. После чего необходимо ответить main-сервису. После смены значения ключа "1", в словаре свойства port, на False должна начать выполняться функция count_TF которая ждет 10 секунд, после чего меняет значение обратно на True.
Собственно как написать вызов метода (функции) count_TF так, чтобы программа не ожидала его завершения и выполнялась дальше, успешно ответила main-сервису?
P.S. Я пока не очень силен в программировании, а все мои попытки использования asyncio и threading не окончились ничем полезным, не особо понимаю как в моем случае их правильно использовать