Подскажите какую конструкцию обернуть в eventlet.tpool.execute() для правильной работы с задачами Apscheduler

Пишу сайт на Flask. Есть необходимость в использовании Apscheduler для периодического выполнения задачи. Но проблема в том что задача не выполняется периодически из-за конфликта с eventlet. На форумах я нашел что нужно обернуть блокирующую конструкцию в eventlet.tpool.execute(). Подскажите что именно мне нужно оборачивать? Так я создаю єкземпляр BackgroundScheduler

scheduler = BackgroundScheduler(daemon=True)

Есть класс для работы с задачами.

from app import scheduler
import json

class SchedulerTask(object):
    schedulers_list_publish = None

    def __init__(self):
        self.schedulers_list_publish = list()

    def add_scheduler_publish(self, dev_id, mqtt, topic_req_res, m_req_state, qos_req, timer):
        id_sch = dev_id + "_scheduler"
        sc = scheduler.add_job(self.publish_async, args=[mqtt, topic_req_res, m_req_state, qos_req, timer, id_sch],
                               id=id_sch, trigger='interval', seconds=timer)
        print(sc.id)
        self.schedulers_list_publish.append(id_sch)
        return id_sch

    def start_schedulers(self):
        print(self.schedulers_list_publish)
        scheduler.start()

    @staticmethod
    def del_schedulers(s_id):
        scheduler.remove_job(s_id)

    # передача запроса на получение данных
    @staticmethod
    def publish_async(mqtt, topic_req_res, m_req_state, qos_req, timer, id_sch):
        try:
            msg = json.dumps(m_req_state)
            mqtt.publish(topic_req_res, msg, qos_req)
        except Exception as ex:
            print("Error publish: " + str(ex))

Вызываю я из функции из другого модуля.

def _handle_connect(self, client, userdata, flags, rc):
    code_list = list()
    for dev in self.devices:
        if dev.device_code not in code_list:        # запущен ли уже поток с таким кодом
            code_list.append(dev.device_code)
            mqtt.subscribe("BK" + dev.device_code + self.type_topic[1], self.qos_sub)
            self.schedulers_list.append(tpool.execute(sch_task.add_scheduler_publish, dev.device_code,
                                                                       mqtt,
                                                                       "BK" + dev.device_code + self.type_topic[0],
                                                                       self.m_request_state,
                                                                       self.qos_request,
                                                                       self.POOL_TIME))
    sch_task.start_schedulers()

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