标签: django-celery

什么是django-celery(djcelery)表?

当我运行syncdb时,我注意到很多表创建如下:

  • djcelery_crontabschedule
  • ...
  • djcelery_taskstate

django-kombu提供传输,因此它与实际队列无关.即使我运行任务,我仍然看不到这些表中没有填充任何内容.这些表用于什么?仅用于监控 - 如果我启用它?

如果是这样,如果我查找AsyncResult(),我猜这实际上是通过django-kombu表而不是djcelery查找任务结果吗?

谢谢.

django celery django-celery kombu

14
推荐指数
1
解决办法
4100
查看次数

django-celery:没有配置后端结果

我想在我的项目中使用django-celery

在settings.py我有

CELERY_RESULT_BACKEND = "amqp"
Run Code Online (Sandbox Code Playgroud)

服务器很好用

python manage.py celeryd --setting=settings
Run Code Online (Sandbox Code Playgroud)

但是如果我想从延迟的任务中访问结果,我会收到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\celery\result.py", line 108, in ready
    return self.status in self.backend.READY_STATES
  File "C:\Python27\lib\site-packages\celery\result.py", line 196, in status
    return self.state
  File "C:\Python27\lib\site-packages\celery\result.py", line 191, in state
    return self.backend.get_status(self.task_id)
  File "C:\Python27\lib\site-packages\celery\backends\base.py", line 404, in _is
_disabled
    raise NotImplementedError("No result backend configured.  "
NotImplementedError: No result backend configured.  Please see the documentation
 for more information.
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为当我刚刚运行celeryd(使用相同的芹菜设置)时,它运行得很好.以前有人遇到过这个问题吗?

提前致谢!

django django-celery

14
推荐指数
2
解决办法
1万
查看次数

没有芹菜的Django的后台处理

我有一个Django站点的一小部分,它保持两个用户之间的主持聊天会话的状态.基本上,第一个用户讲3分钟(没有其他人可以),然后第二个用户说话,然后是30秒暂停,并且该过程再重复一次.我目前正在使用数据库和"RoomState"模型来管理房间的当前状态(谁可以说话等).状态转换受到客户端每隔10秒向我的一个视图发送"ping"AJAX POST消息的影响,该消息检查是否需要更改状态.

这有效,但肯定会感到hacky.我想知道是否有比django-celery + rabbitmq更轻量级的东西来管理计时器上的短期背景任务.我意识到web/Django的本质是无状态的,但我只是想看看是否有人有一个简单的建议来以更可靠的方式管理状态转换.

python django ajax asynchronous django-celery

14
推荐指数
3
解决办法
1万
查看次数

Django芹菜时间限制超过?

我一直收到这个错误......

[2012-06-14 11:54:50,072: ERROR/MainProcess] Hard time limit (300s) exceeded for movies.tasks.encode_media[14cad954-26e2-4511-94ec-b17b9a4149bb]

[2012-06-14 11:54:50,111: ERROR/MainProcess] Task movies.tasks.encode_media[bc173429-77ae-4c96-b987-75337f915ec5] raised exception: TimeLimitExceeded(300,)

Traceback (most recent call last): File "/srv/virtualenvs/filmlib/local/lib/python2.7/site-packages/celery/concurrency/processes/pool.py", line 370, in _on_hard_timeout raise TimeLimitExceeded(hard_timeout)
TimeLimitExceeded: 300
Run Code Online (Sandbox Code Playgroud)

即使我有CELERYD_TASK_TIME_LIMIT = 86400CELERYD_TASK_SOFT_TIME_LIMIT = 86400我的settings.py项目.有谁知道为什么它仍然默认为300s?

谢谢

django celery django-celery

14
推荐指数
1
解决办法
5685
查看次数

如何向Django Celery Flower Monitoring添加身份验证和端点?

我一直在本地使用花,它似乎很容易设置和运行,但我看不出如何在生产环境中设置它.

特别是,如何添加身份验证以及如何定义访问它的URL?

django celery django-celery django-deployment flower

14
推荐指数
1
解决办法
4974
查看次数

14
推荐指数
2
解决办法
8913
查看次数

Celery - RabbitMQ中的消息可以同时由两个或更多工人消费吗?

也许我在愚蠢地提出这个问题,但在进一步开展工作之前,我需要围绕基本概念.

我正在处理几千个RSS源,使用多个Celery工作节点和RabbitMQ节点作为代理.每个订阅源的URL都作为消息写入队列中.工作人员只是从队列中读取URL并开始处理它.我必须确保两个工作人员不会同时处理单个RSS源.

确保任务的文章一次只执行一个,建议一个基于Memcahced的解决方案,用于在处理时锁定Feed.

但我想要了解的是,为什么我需要使用Memcached(或其他东西)来确保RabbitMQ队列上的消息不会被多个worker同时使用.RabbitMQ(或Celery)中是否有一些配置更改可以实现此目标?

python rabbitmq celery django-celery

13
推荐指数
2
解决办法
2829
查看次数

如何推迟Celery任务的执行?

我有一个小脚本,将任务排入队列.此脚本生成大量数据库查询以获取应入队的项目.我面临的问题是,芹菜工人一旦被剧本排队就开始接收任务.这是正确的,这是芹菜应该工作的方式,但这往往导致我的脚本和芹菜工人之间的僵局.

有没有办法可以从脚本中排除我的所有任务,但延迟执行直到脚本完成或直到固定的时间延迟?

我在芹菜或django-芹菜的文件中找不到这个.这可能吗?

目前作为一个快速修复我想到将要处理的所有项目添加到列表中,当我的脚本完成所有查询后,我可以简单地遍历列表并将任务排队.也许这会解决问题,但是当你有数千个物品入队时,这可能是一个坏主意.

python django celery django-celery

13
推荐指数
1
解决办法
2万
查看次数

Celerybeat没有执行定期任务

你如何诊断为什么manage.py celerybeat不执行任何任务?

我通过supervisord运行celerybeat命令:

/usr/local/myapp/src/manage.py celerybeat --schedule=/tmp/celerybeat-schedule-myapp --pidfile=/tmp/celerybeat-myapp.pid --loglevel=INFO
Run Code Online (Sandbox Code Playgroud)

Supervisord似乎运行celerybeat就好了,日志文件显示:

[2013-06-12 13:17:12,540: INFO/MainProcess] Celerybeat: Starting...
[2013-06-12 13:17:12,571: WARNING/MainProcess] Reset: Account for new __version__ field
[2013-06-12 13:17:12,571: WARNING/MainProcess] Reset: Account for new tz field
[2013-06-12 13:17:12,572: WARNING/MainProcess] Reset: Account for new utc_enabled field
Run Code Online (Sandbox Code Playgroud)

我有几个定期任务显示为启用http://localhost:8000/admin/djcelery/periodictask,应该每隔几分钟运行一次.但是,celerybeat日志从不显示正在执行的任何内容.为什么会这样?

python django django-celery celerybeat

13
推荐指数
1
解决办法
1万
查看次数

来自Celery worker的Active Django设置文件

所以我已经为此寻找了很多,但找不到一个好的答案.我正在使用Celery 3.1.7和Django 1.5.1.,没有django-celery包,因为较新版本的Celery不再需要它.我设法使用RabbitMQ设置任务并执行它们.一切都在应有的地方.但是,我正在将它整合到一个现有的,相当大的Django项目中.在那里我们指定了几个Django设置文件,而不仅仅是一个.我们根据环境运行不同的一个,例如一个用于本地机器,一个用于服务器.我的问题是,我似乎无法从芹菜工作者中追踪哪个设置文件是"活动的",芹菜工作者在我的项目根目录中运行celery.py文件(如文档所指定).那里的文档需要指定Django设置文件,如下所示:

os.environ.setdefault('DJANGO_SETTINGS_MODULE', "project.settings.server")
Run Code Online (Sandbox Code Playgroud)

现在这个工作,但如果我在本地移动东西我需要改变它settings.local以使其工作,并且每次.像在标准Django文件中那样在运行时读取设置对象不起作用,因为芹菜工作者在不同的进程中执行.那么,使用这种情况,有没有人知道如何从芹菜工人动态获取活动的Django设置文件?或者也许在启动芹菜工人时将其作为变量传递?(比如Django等--settings = project.settings.local)谢谢!

python django celery django-celery

13
推荐指数
2
解决办法
8233
查看次数