Flask 告诉我在eventlet.tpool.execute()中包装什么构造才能正确处理Apscheduler任务
我正在为flask写一个网站。需要使用Flask 告诉我在eventlet.tpool.execute()中包装什么构造才能正确处理Apscheduler任务,flask,apscheduler,eventlet,Flask,Apscheduler,Eventlet,我正在为flask写一个网站。需要使用apScheduler定期执行任务。但问题是,由于与eventlet冲突,任务没有定期执行。在论坛上,我发现需要在eventlet.tpool.execute()中包装阻塞构造。告诉我具体需要包装什么 这就是我如何创建BackgroundScheduler scheduler = BackgroundScheduler(daemon=True) 有一个用于处理任务的类 from app import scheduler import json clas
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()