Не понимаю как остановить прослушивание longoll python vk coin

import random
import time
import vkcoin
from vk_api import VkApi
from vk_api.bot_longpoll import VkBotEventType, VkBotLongPoll
from vk_api.longpoll import VkLongPoll
from vk_api.utils import get_random_id
import datetime
from pycbrf import ExchangeRates

stavki = {}
vk_session = VkApi(
    token=)  # сессия вк
longpoll = VkLongPoll(vk_session)
merchant = vkcoin.VKCoin(key='', user_id=, token = '')  # сессия вк коин
amount = 0
user_id = ''



@merchant.payment_handler(handler_type='longpoll')
def payment_received(data):
    """
    При получении платежа будет запущена эта функция. Она может называться как угодно
    :param data['to_id']: Ваш ID ВКонтакте
    :param data['id']: ID платежа
    :param data['created_at']: Unix timestamp, время когда был совершён платёж
    :param data['from_id']: ID отправителя платежа
    :param data['amount']: Количество полученных VK Coin
    """

    user_id = data['from_id']
    amount = data['amount']

    print('Получен платёж на сумму {amount} от {user_id}'.format(amount=amount, user_id=user_id))


def m():
    longpoll = VkBotLongPoll(vk_session, '192247413')  # longpoll
    vk = vk_session.get_api()
    for event in longpoll.listen():  # проверяем сообщения
        if event.type == VkBotEventType.MESSAGE_NEW:  # новое сообщение
            if event.obj.text.lower() == 'пополнить баланс' \
                    or event.obj.text.lower() == 'пополнить счёт' \
                    or event.obj.text.lower() == 'пополнить':
                vk.messages.send(
                    user_id=event.obj.from_id,
                    random_id=get_random_id(),
                    message=['Для пополнения перейдите по ссылке:' "\n"
                             f'{merchant.get_payment_url(1, 777, True)}']
                )
                    merchant.run_longpoll(tx=[1])


if __name__ == '__main__':  # включение бота
        m()

Ответы (1 шт):

Автор решения: Вячеслав Сысоев

Описание функций LongPool модуля VK_API

Здесь написано что метод Listen() бесконечно слушает сервер, вот его исходный код:

def listen(self):
        """ Слушать сервер

        :yields: :class:`Event`
        """

        while True:
            for event in self.check():
                yield event

Поэтому его можно остановить только прерыванием программы (а прерывание потом можно отловить с помощью try).

Или же вы можете использовать другой метод. Там есть функция Check(), которая проверяет события от сервера один раз.

UPD: Вот пример кода через try .. except

import time

def Listen():
  while True:
    time.sleep(1)
    print("hello")


if __name__ == "__main__":
  try:
    Listen()
  except KeyboardInterrupt:
    print("Stop!")

Тут функцию Listen из Vk api я заменил своей. По факту она должна быть просто в блоке try. При нажатии CTRL+C подаётся прерывание с клавиатуры (Keyboard Interrupt). И сразу оно отлавливается в блоке except.

→ Ссылка