python asyncio和celery对比_django celery和asyncio循环参数必须与Future一致,大约每3分钟一次...

在使用Django的Celery和节拍器运行定期SNMP数据采集任务时,遇到一个问题,任务每分钟执行一次,但每隔3分钟出现一次失败。错误信息显示`loop argument must agree with Future`。问题可能源于asyncio循环的管理,代码尝试检查并创建新的循环,但似乎导致了Future对象与循环不匹配的问题。
摘要由CSDN通过智能技术生成

我用django芹菜和芹菜节拍运行定期任务。我每一分钟运行一个任务,通过SNMP获取一些数据。在

我的函数使用asyncio,如下所示。我在代码中添加了一个检查,以检查循环是否关闭并创建一个新的循环。在

但似乎每完成几项任务,我就失败了,在Django任务结果数据库中,我有下面的回溯。似乎每3分钟就有一次失败,但每分钟都有成功,没有失败

错误:Traceback (most recent call last):

File "/usr/local/lib/python3.6/site-packages/celery/app/trace.py", line 374, in trace_task

R = retval = fun(*args, **kwargs)

File "/usr/local/lib/python3.6/site-packages/celery/app/trace.py", line 629, in __protected_call__

return self.run(*args, **kwargs)

File "/itapp/itapp/monitoring/tasks.py", line 32, in link_data

return get_link_data()

File "/itapp/itapp/monitoring/jobs/link_monitoring.py", line 209, in get_link_data

done, pending = loop.run_until_complete(asyncio.wait(tasks))

File "/usr/local/lib/python3.6/asyncio/base_events.py", line 468, in run_until_complete

return future.result()

File "/usr/local/lib/python3.6/asyncio/tasks.py", line 311, in wait

fs = {ensure_future(f, loop=loop) for f in set(fs)}

File "/usr/local/lib/python3.6/asyncio/tasks.py", line 311, in

fs = {ensure_future(f, loop=loop) for f in set(fs)}

File "/usr/local/lib/python3.6/asyncio/tasks.py", line 514, in ensure_future

raise ValueError('loop argument must agree with Future')

ValueError: loop argument must agree with Future

功能:

^{pr2}$

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`asyncio` 和 `Celery` 都是 Python 中用于异步编程的工具,但它们在用途和设计上有所不同。 **asyncio(异步I/O):** - 异步IO库,它是 Python 标准库的一部分,主要侧重于单线程并发处理,适合于 I/O 密集型任务,比如网络请求、文件读写等。通过使用异步/await语法,`asyncio`可以让代码顺序执行,但底层会利用事件循环和回调来管理多个任务并发执行,提高程序响应速度。 - 异步IO适合于对实时性要求较高的场景,例如实时聊天应用或Web服务器。 - asyncio 任务通常是由程序自己启动和管理的。 **Celery:** - 是一个分布式任务队列系统,它基于消息传递模型,能够将耗时的、复杂的、可能需要跨多个机器的任务异步地添加到队列中。Celery 支持多种消息队列如RabbitMQ、Redis等。 - 它的核心是将工作分解为可独立执行的单元,并通过工人(worker)在后台执行这些任务。这使得开发者可以专注于业务逻辑,而无需担心任务调度和失败处理。 - Celery 提供了丰富的错误处理和监控工具,以及跨语言支持,可以与其他语言的消费者进行交互。 - 适用于需要高可用性和可靠性的场景,比如批量数据处理、邮件发送、爬虫等。 **区别总结:** 1. asyncio 主要是针对单机、本地的、轻量级的异步编程,而 Celery 更关注分布式任务的管理和执行。 2. asyncio 更注重单个应用程序内部的并发优化,Celery 则是解决跨进程、跨主机的异步任务分发。 3. 使用 asyncio,程序员需要自行管理任务的调度和错误处理,Celery 提供了更完整的任务管理解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值