我想做两件事
app.steps['worker'].add(LoadConfig)
完美无缺
但我无法进行 SetQueue 启动步骤
只是我的 SetQueue 现在看起来像:
class SetQueue(bootsteps.StartStopStep):
requires = (Consumer, )
def start(self, parent, **kwargs):
parent.add_task_queue('q_name', exchange='q_name', routing_key='q_name')
app.steps['consumer'].add(SetQueue)
Run Code Online (Sandbox Code Playgroud)
它不起作用。
我认为我的问题是我不明白 - 在什么时候(requires=(???, )) 可以添加队列。
我有一个包含类别列表的配置文件
cat_link = {'cat1':[link1,link2....],'cat2':[link3,link4....],'cat3':[link5,link6....],'cat4':[link7,link8....]}
Run Code Online (Sandbox Code Playgroud)
我想根据配置文件中定义的类别总数创建队列,而且当我处理特定类别的链接时,每个队列都应该处理自己的一组链接。
处理链接的任务是相同的。我只是希望每个类别链接都应在其特定队列中进行处理。
它应该是这样的:-
for category, link in cat_link.iteritems():
process_link.apply_async(args=[link],
queue=category,)
Run Code Online (Sandbox Code Playgroud)
我应该如何创建动态队列,记住将来可以删除/添加任何类别?
我的 celeryconfig 应该是什么样子的?目前如下:-
BROKER_URL = 'amqp://'
CELERY_RESULT_BACKEND = 'amqp://'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT=['json']
CELERY_TIMEZONE = 'Europe/Oslo'
CELERY_ENABLE_UTC = True
#Should I read my `cat_link` config setting in a loop and then create the queues??
Run Code Online (Sandbox Code Playgroud)
我见过不同的任务有不同的队列,但是同一个任务可能有不同的队列吗?
我在 Heroku 上部署了一个 Celery 应用程序,但是在 Heroku 日志中我没有看到任何与任务相关的信息(我知道任务实际上已执行)。据我所知,Heroku 会自动收集记录到 stdout 或 stderr 的所有内容。Celery 默认不登录到 stdout/stderr 吗?还是我需要实现自定义日志记录?我希望至少在日志中看到类似“执行任务 X”的内容。
我正在构建一个 Web 应用程序,通过从客户端发送 ajax 请求,我开始训练在服务器端使用 theano 实现的神经网络。显然,我不想等待服务器完全训练网络以将答案发送回我的客户端,因为这会很长。
所以我想出了 celery,它使我能够在服务器端执行异步代码。我用命令运行芹菜工人celery -A CBIR worker -l info
。不幸的是,每次有工作人员运行我的任务(正在使用 theano 训练我的网络)时,我都会收到以下消息:
[2015-12-14 19:15:06,790: ERROR/MainProcess] Process 'Worker-3' pid:1610 exited with 'signal 11 (SIGSEGV)'
[2015-12-14 19:15:07,001: ERROR/MainProcess] Task fit[ac40d4d4-5b56-4278-b270-647ef76f3a49] raised unexpected: WorkerLostError('Worker exited prematurely: signal 11 (SIGSEGV).',)
Traceback (most recent call last):
File "/Users/leo/anaconda/envs/ImgRet/lib/python3.5/site-packages/billiard/pool.py", line 1175, in mark_as_worker_losthuman_status(exitcode)),
billiard.exceptions.WorkerLostError: Worker exited prematurely: signal 11 (SIGSEGV).
Run Code Online (Sandbox Code Playgroud)
我一直在寻找为什么会发生此错误,并且据我所知,我正在运行的代码正在遭受内存泄漏。我不明白的是为什么我的代码在不使用 celery 时运行没有问题,但在使用 Celery 时出现此错误?
最重要的是,我不知道如何解决这个问题。我使用 lldb 查看生成的转储文件,这是我的回溯:
thread #1: tid = 0x0000, 0x00007fff93b4a9b3 libdispatch.dylib`dispatch_group_async + 533, stop reason = …
Run Code Online (Sandbox Code Playgroud) Celery 对任务的 eta 有限制吗?我想foo
在 12 天后执行该方法,Celery 会不会有问题?或者我需要为这么长的 eta 配置任何 Celery 设置吗?
next_run = datetime.now() + timedelta(days = 12)
foo.apply_async(args=[], eta = next_run)
Run Code Online (Sandbox Code Playgroud) 我正在尝试保存组结果以供以后检索:
job = group([
add.s(1, 1),
add.s(2, 2)
])
result = job.apply_async()
result.save()
from celery.result import GroupResult
saved_result = GroupResult.restore(result.id)
Run Code Online (Sandbox Code Playgroud)
但是,我收到错误消息:
*** AttributeError: 'DisabledBackend' object has no attribute '_restore_group'
Run Code Online (Sandbox Code Playgroud)
我CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
在我的配置中设置了后端。
我该如何解决这个问题?
当我通过 ubuntu 15.04 终端运行命令时
芹菜工人 -A celery_blog -l inf -c 5
我总是得到
找不到已安装的 python-django 或 python3-django 版本。
虽然我已经为 python 2.x 和 3.x 安装了 django,但您也可以参考附加的屏幕截图。
另外,为什么在运行 celery worker 时甚至要求 django?
我已经在AWS Elastic Beanstalk上部署了Django 2应用程序,并且我正在尝试配置Celery,以便在同一台计算机上执行异步任务。
我的文件:
02_packages.config
files:
"/usr/local/share/pycurl-7.43.0.tar.gz" :
mode: "000644"
owner: root
group: root
source: https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz
packages:
yum:
python34-devel: []
libcurl-devel: []
commands:
01_download_pip3:
# run this before PIP installs requirements as it needs to be compiled with OpenSSL
command: 'curl -O https://bootstrap.pypa.io/get-pip.py'
02_install_pip3:
# run this before PIP installs requirements as it needs to be compiled with OpenSSL
command: 'python3 get-pip.py'
container_commands:
03_pycurl_reinstall:
# run this before PIP installs requirements as it needs to be compiled with OpenSSL …
Run Code Online (Sandbox Code Playgroud) 我看不到管理员中的任务。我按照https://github.com/jezdez/django-celery-monitor中的步骤进行操作
我用了
celery==4.1.1
django-celery-results==1.0.1
django-celery-beat==1.0.1
django_celery_monitor==1.1.2
Run Code Online (Sandbox Code Playgroud)
跑manage.py migrate celery_monitor
迁移进行得很顺利。然celery -A lbb events -l info --camera django_celery_monitor.camera.Camera --frequency=2.0
而celery -A lbb worker -l info
在分离的外壳。但是仍然看不到我在celery-monitor > tasks
表中运行的任务。
当我尝试启动工作程序时,出现一个问题:
ImportError:没有名为“ project”的模块
追溯(最近一次通话):
File "/usr/local/bin/celery", line 11, in <module>
sys.exit(main())
File "/usr/local/lib/python3.5/dist-packages/celery/__main__.py", line 16, in main
_main()
File "/usr/local/lib/python3.5/dist-packages/celery/bin/celery.py", line 322, in main
cmd.execute_from_commandline(argv)
File "/usr/local/lib/python3.5/dist-packages/celery/bin/celery.py", line 496, in execute_from_commandline
super(CeleryCommand, self).execute_from_commandline(argv)))
File "/usr/local/lib/python3.5/dist-packages/celery/bin/base.py", line 273, in execute_from_commandline
argv = self.setup_app_from_commandline(argv)
File "/usr/local/lib/python3.5/dist-packages/celery/bin/base.py", line 479, in setup_app_from_commandline
self.app = self.find_app(app)
File "/usr/local/lib/python3.5/dist-packages/celery/bin/base.py", line 501, in find_app
return find_app(app, symbol_by_name=self.symbol_by_name)
File "/usr/local/lib/python3.5/dist-packages/celery/app/utils.py", line 359, in find_app
sym = symbol_by_name(app, imp=imp)
File "/usr/local/lib/python3.5/dist-packages/celery/bin/base.py", line 504, in symbol_by_name
return imports.symbol_by_name(name, imp=imp)
File …
Run Code Online (Sandbox Code Playgroud) celery ×10
python ×8
django ×4
celery-task ×2
asynchronous ×1
flask ×1
heroku ×1
supervisord ×1
theano ×1