【发布时间】: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/… 在未来我会添加答案