热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Win10下Celery4.2.1基于redis的部署与错误

Win10下Celery4.2.1基于redis的部署与错误,Go语言社区,Golang程序员人脉社

Celery是一个分布式异步任务的神器,由Python开发但是其通信协议可以支持其它语言。它还可以设置定时任务,设置多个任务队列并路由任务到指定的队列;同时还提供了运行时的一些监控和管理接口。

安装
  • 安装python3.7(官网下载直接安装)
  • 安装celery库(pip install celery)
  • 安装redis库(pip install redis)
配置启动worker

安装完成之后就可以配置celery的测试代码了。首先是clelry的运行配置文件celeryconfig.py(当然你也可以从命令行传入)

BROKER_URL = 'redis://pcma.xxx.com:6379/0'
CELERY_RESULT_BACKEND = 'redis://pcma.xxx.com:6379/0'

CELERY_REDIS_MAX_COnNECTIONS= 4
CELERYD_COnCURRENCY= 4
BROKER_TRANSPORT_OPTIOnS= {'visibility_timeout': 5}    # 5min

CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ACCEPT_COnTENT= ['json']  # Ignore other content
CELERY_TIMEZOnE= 'Asia/Shanghai'
CELERY_ENABLE_UTC = True

接着创建celery的worker代码,celery_worker.py

from celery import Celery

app = Celery('celery_work')
app.config_from_object('celeryconfig')

@app.task
def add(x, y):
    return x + y

然后我们就可以启动worker服务了,此后该worker会一直等待任务并执行。具体启动命令如下:

celery -A celery_server worker --loglevel=info

这种方式默认是多进程启动worker。如果你希望使用单进程启动的话,命令如下:

celery -A celery_server worker --loglevel=info -P solo

另外,你还可以使用协程的方式启动。当然首先你需要安装eventlet。(pip install eventlet)

celery -A celery_server worker --loglevel=info -P eventlet
任务调用

worker启动就绪之后,我们要做的事情就是添加要执行的任务。具体代码如下:

from celery_worker import add

result = add.delay(4, 4)

如果你希望能获取到执行的结果,如下接口可以满足你的需求:

result.ready()    # 获取任务执行状态
result.get(timeout=1, propagate=False)    # 获取任务执行结果
result.traceback    # 获取任务执行异常时的堆栈信息

注意:如果你需要获取任务的结果,那边就需要配置CELERY_RESULT_BACKEND选项。否则celery不会存储结果。

问题及解决

由于安装的是celery4.2.1的版本。其中有2个bug需要针对性的解决。

  1. Python 3.7 syntax error: async is a reserved keyword #4849
  2. Unable to run tasks under Windows #4081

第1个是因为async在Python3.7已经是关键字了,但是celery版本没有更新导致的。下一个发布版本中会修复。没有新版本之前,我们只要修改celery文件中的async为另外的字符即可。比如我修改为了async_2。(注意定义和引用需要修改全套的)

第2个是因为windows下没有fork多进程的模块,而celery默认启动方式就是多进程的,并且还用了fork的方式。解决方式有多种:

  • 使用单进程启动方式(上面已列出,另注意CELERYD_CONCURRENCY配置项取消)
  • 在创建celery实例之前,配置系统环境变量。os.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1')
  • 使用协程的方式启动(上面已列出)
问题描述

问题1:

  File "celery/backends/redis.py", line 22
    from . import async, base
                      ^
SyntaxError: invalid syntax

问题2:

[2017-06-08 15:31:49,416: ERROR/MainProcess] Task handler raised error: ValueError('not enough values to unpack (expected 3, got 0)',)
Traceback (most recent call last):
File "c:program filespython36libsite-packagesbilliardpool.py", line 359, in workloop
result = (True, prepare_result(fun(*args, **kwargs)))
File "c:program filespython36libsite-packagesceleryapptrace.py", line 518, in _fast_trace_task
tasks, accept, hostname = _loc
ValueError: not enough values to unpack (expected 3, got 0)

了解更多关于测试与Python的文章,请关注testQna公众号!


推荐阅读
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • Python 3 Scrapy 框架执行流程详解
    本文详细介绍了如何在 Python 3 环境下安装和使用 Scrapy 框架,包括常用命令和执行流程。Scrapy 是一个强大的 Web 抓取框架,适用于数据挖掘、监控和自动化测试等多种场景。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • MicrosoftDeploymentToolkit2010部署培训实验手册V1.0目录实验环境说明3实验环境虚拟机使用信息3注意:4实验手册正文说 ... [详细]
  • Spark与HBase结合处理大规模流量数据结构设计
    本文将详细介绍如何利用Spark和HBase进行大规模流量数据的分析与处理,包括数据结构的设计和优化方法。 ... [详细]
  • 在Windows系统中安装TensorFlow GPU版的详细指南与常见问题解决
    在Windows系统中安装TensorFlow GPU版是许多深度学习初学者面临的挑战。本文详细介绍了安装过程中的每一个步骤,并针对常见的问题提供了有效的解决方案。通过本文的指导,读者可以顺利地完成安装并避免常见的陷阱。 ... [详细]
  • Keepalived 提供了多种强大且灵活的后端健康检查机制,包括 HTTP_GET、SSL_GET、TCP_CHECK、SMTP_CHECK 和 MISC_CHECK 等多种检测方法。这些健康检查功能确保了高可用性环境中的服务稳定性和可靠性。通过合理配置这些检查方式,可以有效监测后端服务器的状态,及时发现并处理故障,从而提高系统的整体性能和可用性。 ... [详细]
  • 在 CentOS 7 系统中安装 Scrapy 时遇到了一些挑战。尽管 Scrapy 在 Ubuntu 上安装简便,但在 CentOS 7 上需要额外的配置和步骤。本文总结了常见问题及其解决方案,帮助用户顺利安装并使用 Scrapy 进行网络爬虫开发。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 资源管理器的基础架构包括三个核心组件:1)资源池,用于将CPU和内存等资源分配给不同的容器;2)负载组,负责承载任务并将其分配到相应的资源池;3)分类函数,用于将不同的会话映射到合适的负载组。该系统提供了两种主要的资源管理策略。 ... [详细]
author-avatar
mobiledu2502855777
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有