增加了对“戏剧化”任务处理库支持的烧瓶扩展

Flask-Melodramatiq的Python项目详细描述


flask情节剧是一个Flask扩展,它增加了对 任务处理库。

Dramatiq是一个伟大的图书馆,而flask情节剧则尽力不 迫使你改变与之互动的方式 它。Flask情节剧定义了代理类型周围的薄包装 在Dramatiq中可用,因此Dramatiq的API的所有功能都将保留 对你有用。

例如:

import dramatiq
from flask import Flask
from flask_melodramatiq import RabbitmqBroker

app = Flask(__name__)
broker = RabbitmqBroker(app)
dramatiq.set_broker(broker)

@dramatiq.actor
def task():
    print('Snakes appreciate good theatrical preformace.')

或者,如果您喜欢烧瓶应用程序工厂模式:

import dramatiq
from flask import Flask
from flask_melodramatiq import RabbitmqBroker

broker = RabbitmqBroker()
dramatiq.set_broker(broker)

@dramatiq.actor
def task():
    print('Snakes appreciate good theatrical preformace.')

def create_app():
    app = Flask(__name__)
    broker.init_app(app)
    return app

在这些例子中,我们创建的broker实例(我们称之为 “懒惰的经纪人”)是真正的Dramatiq经纪人,可以使用 任何可以使用“本地”代理的地方。(它有 dramatiq.brokers.rabbitmq.RabbitmqBroker作为超类!)懒惰的 代理是薄包装,它添加了几个重要功能:

  1. 它们遵循烧瓶应用程序配置中的设置。
  2. init_app可以在之前或之后对它们调用。 已经确定了演员。
  3. 在执行过程中正确设置了烧瓶应用程序上下文 的任务。
  4. 他们很少增加方便的方法。(装饰符Broker.actordecorator 例如。)

配置

您可以通过传递 构造函数的关键字参数,或通过设置 应用程序中键集合DRAMATIQ_BROKER_*的值 配置。例如,您可以执行以下任一操作:

from flask_melodramatiq import RabbitmqBroker

broker = RabbitmqBroker(
    url='amqp://mybroker:5672', confirm_delivery=True)

或者您可以将其放入应用程序配置:

DRAMATIQ_BROKER_URL = 'amqp://mybroker:5672'
DRAMATIQ_BROKER_CONFIRM_DELIVERY = True

如果传递给构造函数的配置值不同 从app config中设置的值来看,后者优先。你 甚至可以在应用程序配置中设置/覆盖代理的类型:

from flask_melodramatiq import Broker

broker = Broker()  # Broker's type is not specified here.

相反,在app config中指定类型:

DRAMATIQ_BROKER_CLASS = 'StubBroker'

此功能在测试代码时非常有用。

启动工人

有了花瓶情节剧,你就拥有了戏剧的全部力量 随你处置。例如,为您的 您可以运行的代理实例:

$ dramatiq wsgi:broker

wsgi.py中,您可能有这样的东西:

from myapp import create_app, broker

app = create_app()

您可以拥有任意数量的代理实例,但您需要 用一个单独的命令启动每一个。

安装

你可以用pip

$ pip install Flask-Melodramatiq

您可以阅读文档here

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用HSET函数在redis中保存keyvalue   如何选择Tomcat上下文。Java代码中通过SpEL表达式的xml参数   java可以在javassist中访问Groovy脚本中声明的类吗?   java Lucene setPositionIncrement不起作用   有没有办法用Java调用shell脚本,并通过Java类为shell脚本变量设置值   java堆算法在列表中的实现   java如何让TTS在一个应用程序中以不同的语言表达?   java重构并在遍历枚举结构时删除case语句   java Android获取附近地点的列表   选定id后,java应用程序强制停止   如何用java显示消息对话框   java如何按日期和增量设置文本?   java如何按照依赖关系的顺序正确加载项目的类?   java在尝试为实体添加标识符时遇到问题   如何从Java字节码判断局部变量是否为“final”?(与BCEL相关)   neo4j中的java节点级安全性   java我在libGDX中缺少什么来获取Actor上的InputEvent?   java RecycleView不显示任何数据   Java中无构造函数创建子类实例的继承