flask异步操作_flask中使用信号来执行异步任务

本文介绍如何在Flask应用中利用信号进行异步操作,避免使用消息队列或Redis。通过定义和发送信号,以及创建TaskManager类来调度异步任务,如`taskmanager`,它根据接收到的参数调用不同方法执行任务。
摘要由CSDN通过智能技术生成

比如在接口中执行某些操作之后,执行异步通知的操作但不使用消息队列或redis,可以通过信号的方式来做。

from flask.signals import Namespace

_signal = Namespace()

apply_task_signal = _signal.signal(name='some', doc='')

def apply_task_send(action_type, action_method, action_data, namespace='default', **kwargs):

apply_task_signal.send(current_app._get_current_object(),namespace=namespace,action_method=action_method, action_data=action_data,action_type=action_type, **kwargs)

def apply_task_signal_callback(sender,namespace, action_type,action_method,action_data,**kwargs):

taskmanager.delay

taskmanager.apply_async

class TaskManager:

def __init__(self,namespace,action_type,action_method,action_data,*args,**kwargs):

self.namespace = namespace

self.action_type = action_type

...

self.handler = getattr(self, self.action_type)()

def __call__(self):

return getattr(self.handler, self.action_method)(self.action_data)

def typea(self):

cls_handler = typea()

return cls_handler

class typea():

def method1(action_data):

# 这样就把任务需要的数据传入到特定的函数中

# 当然一般还需要一个装饰器检验传入的action_data数据是否正常,如果异常则需要日志记录

pass

@celery.task

def taskmanager(namespace,action_type,action_method,action_data,**kwargs):

t_manager = TaskManager(...)

t_manager()

current_app 那是获取当前的应用上下文

TaskManager是通过传入的action_type method data来触发不同的异步任务的 管理器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值