【问题标题】:Celery error "Received 0x00 while expecting 0xce"芹菜错误“收到 0x00 而期待 0xce”
【发布时间】:2016-11-20 12:10:06
【问题描述】:

我尝试使用 celery。我已经通过 celery 教程中的命令安装了 rabbit-mq

sudo apt-get install rabbitmq-server

当我在一个文件中编写代码并运行它来测试功能时,一切都运行良好。但是当我尝试在 Django 视图中添加我的代码,然后对我的视图执行并发请求时,我得到了这种异常:

File "/home/kinmanz/PycharmProjects/GitFace/myvenv/lib/python3.5/site-packages/amqp/connection.py", line 464, in drain_events
    return self.blocking_read(timeout)
  File "/home/kinmanz/PycharmProjects/GitFace/myvenv/lib/python3.5/site-packages/amqp/connection.py", line 468, in blocking_read
    frame = self.transport.read_frame()
  File "/home/kinmanz/PycharmProjects/GitFace/myvenv/lib/python3.5/site-packages/amqp/transport.py", line 251, in read_frame
    'Received {0:#04x} while expecting 0xce'.format(ch))
amqp.exceptions.UnexpectedFrame: Received 0x00 while expecting 0xce

我认为问题可能在于请求的并发,我应该以某种方式使队列并发安全。

我使用 Python 3.5、Celery 4.0.0、RabbitMQ 3.5.7


amqplib 中的实际问题请参阅下面的答案。

【问题讨论】:

  • 您的 django 视图是否包含任何与 celery 相关的任务调用?
  • 没有,我在这里找到了同样问题的描述github.com/celery/celery/issues/2066 实际上是关于python3的问题,并且创建者刚刚写了他没有任何资源来解决这个问题,可能还有其他方法解决那个问题?也许你可以建议一些关于使用 Python3 + celery + 对 cellery 的并发请求,这样我就可以获得工作变体。
  • 我已经设法解决了这个问题,无论如何,问题似乎已经被克服,但这并不是一个好方法。我曾尝试使用 redis,结果后端 app = Celery('tasks', backend='redis://localhost', broker='pyamqp://'),如果有人会帮助看到 michal.karzynski.pl/blog/2014/05/18/… 在未来我会添加答案

标签: rabbitmq celery


【解决方案1】:

可能对于遇到相同问题的人,我将列出我设法找到的可能解决方案。如果您知道更好的解决方案,请添加您的答案或评论我的。

如果您使用的是 Python 2.x,请查看该问题 https://github.com/celery/celery/issues/922 amqplib 中的问题如果它在 librabbitmq 上发生变化,一切都应该正常工作,这很容易做到,请参阅: Framing Errors in Celery 3.0.1


但是,如果您使用的是 Python 3.x,则无法以这种方式解决该问题,因为没有与 Python 3 兼容的 librabbitmq 可用,请参阅问题 https://github.com/celery/celery/issues/2066 但在这种情况下,您可以在 redis 上更改结果后端,例如:

1) 安装redis服务器:

$ sudo aptitude install redis-server

2) 更改您的应用配置

app = Celery('tasks', backend='redis://localhost', broker='pyamqp://')

一些关于安装redis的有用链接:Setting up an asynchronous task queue for django using celery redisCelery-redis quick guide


对于 Python 3,您可以尝试在 Python 2.7 中运行 celery worker,而您的应用正在运行 Python 3,在这种情况下不要忘记安装 librabbitmq 而不是 amqplib。 (这种方式好像不方便)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 2014-10-11
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多