塔曲任务队列系统

taqu的Python项目详细描述


https://travis-ci.org/lietu/taqu.svg?branch=masterhttps://img.shields.io/badge/code%20style-black-000000.svghttps://codecov.io/gh/lietu/taqu/branch/master/graph/badge.svghttps://sonarcloud.io/api/project_badges/measure?project=lietu_taqu&metric=alert_statusGitHub issuesPyPI - DownloadsPyPIPyPI - Python Versionhttps://img.shields.io/badge/License-BSD%203--Clause-blue.svg

基于Azure服务总线队列和pydantic模型构建的Python任务队列系统。在

这是什么?在

许多系统都可以从后台任务队列中获益,这些任务独立于API或其他进程运行。这有助于提高API性能,限制流量峰值的影响,以及通过并行处理各种事情来扩展。在

Python的实际标准是celeri+RabbitMQ,但是托管RabbitMQ是另一个负担,并不总是最有趣的体验,而且celeri还不支持asyncio。完全托管的解决方案(如Azure服务总线)可以帮助您更快地起步,无需担心的事情更少,还可以让您节省成本。在

主要用于asyncio(来自taqu.aio模块),但也可以用于非异步代码(使用taqu模块的导入)。在

支持您可能需要的所有基本功能:

  • Fast insertion of tasks to queue
  • Async task processing
  • Easy to scale workers
  • Retry logic - if there’s an uncaught exception the task will automatically be put back in the queue
  • Clean shutdown on Ctrl+C (waits until tasks finish processing)

许可证

许可证很重要。该项目本身使用BSD 3条款许可证,但例如,用于存储总线的Azure库和它使用的其他此类库可能有自己的许可证。在

有关详细信息,请查看LICENSE-文件。在

入门

Azure Portal中设置一个新的服务总线(任何层都可以),然后在其中设置一个队列。您可能希望启用分区,也可能需要启用死记硬背。然后您需要获取代码的访问凭据。确保已安装Azure CLI,然后运行:

az login  # Ensure you're logged in to Azure
az account list  # List subscriptions
az account set --subscription <subscriptionId>  # Set active subscription

az servicebus namespace authorization-rule keys list \
    --resource-group <rgName> \
    --namespace-name <namespace> \
    --name RootManageSharedAccessKey \
    --query primaryConnectionString \
    --output tsv

你还需要使用安装了tall的Azure库:

^{pr2}$

然后,您可以设置您的worker,下面是一个示例worker.py,您可以使用python worker.py运行它:

importasynciofromtaqu.aioimportTaquAzureWorkerfrompydanticimportBaseModelCONNECTION_STRING="..."worker=TaquAzureWorker(CONNECTION_STRING)classCreateUser(BaseModel):username:strasyncdefcreate_user(user:CreateUser):print(user.username)worker.register(create_user)worker.run()

在worker就位后,您可以创建一个客户端并发送一些任务

fromtaquimportTaquAzureClientfrompydanticimportBaseModelCONNECTION_STRING="..."taqu=TaquAzureClient(CONNECTION_STRING)classCreateUser(BaseModel):username:strtaqu.add_task(CreateUser(username="my_new_username"))

您也可以查看examples。在

贡献

GitHub在这里跟踪这个项目的请求。如果你想投稿,请随意在这里submit issues(包括功能请求)或pr。在

在本地测试更改python setup.py develop是一种很好的运行方法,之后可以python setup.py develop --uninstall(您可能还需要使用--user标志)。在

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

推荐PyPI第三方库


热门话题
插入表达式以完成JAVA语句块时出现语法错误   在linkedlist中的特定节点后插入java   java如何将参数传递给安卓 junit测试(参数化测试)   java在运行时将数据添加到片段中的RecyclerView,在该片段中,数据是在单独的片段中创建的   java apache CsrfPreventionFilter和404错误   java Ask是安卓 6.0的多重权限   java将字符串解析为Time并插入mysqldatabase   java扩展MyBatis映射器接口可能导致异常   java SparkSql不支持日期格式   在java中剪切字符串的一部分   将Java lambda的结果分配给字段   在Java中解析OCL?   java解析json到安卓中活动中的对象   用于时区转换的JavaAPI   在Oracle上建立与ESRI geodatabase直接连接的java在未处于调试模式时挂起   拆分文件时出错。使用Java8的xml文件   java eclipse jsp无颜色、代码完成和错误检测   java spring kafka侦听器在错误的位置查找ContainerProperty   java Springboot应用程序@EnableConfigServer无法在Eclipse中解析   当尝试使用ConstraintLayout将java视图添加到同一行时,java视图会被截断