Если вы используете asyncio (я полагаю, вы из-за тега asyncio), запланированная операция может быть выполнена с помощью задачи.
import asyncio
loop = asyncio.get_event_loop()
async def check_api():
while True:
# Do API check, helps if this is using async methods
await asyncio.sleep(15 * 60) # 15 minutes (in seconds)
loop.create_task(check_api())
... # Rest of your application
loop.run_forever()
Если ваша проверка API не асинхронна (или библиотека,используется для взаимодействия с ним - это не асинхронно) вы можете использовать Executor для запуска операции в отдельном потоке или процессе, сохраняя при этом asyncio API.
Например:
from concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor()
def call_api():
...
async def check_api():
while True:
await loop.run_in_executor(executor, call_api)
await asyncio.sleep(15 * 60) # 15 minutes (in seconds)
Обратите внимание, что asyncio не делает ваш код параллельным автоматически, это совместная многозадачность, все ваши методы должны взаимодействовать с помощью await, длительная операция по-прежнему блокирует другие потоки, и в этом случае, Executor поможет.