我最近一直在忙于软件开发,并取得了一些成功,使celery屈服于我的意志。我已经成功地使用它发送电子邮件,并且刚刚尝试使用几乎完全相同的代码(在重新启动所有进程等之后)通过Twilio发送短信。但是我不断遇到以下问题:File"/Users/Rob/Dropbox/Python/secTrial/views.py",line115,insend_smssend_sms.delay(recipients,form.text.data)AttributeError:'function'objecthasnoattribute'delay'我的代码如下:@celery.taskdefsend
如果我之前不知道执行了哪个任务,如何提取任务的结果?这是设置:给定以下来源('tasks.py'):fromceleryimportCeleryapp=Celery('tasks',backend="db+mysql://u:p@localhost/db",broker='amqp://guest:guest@localhost:5672//')@app.taskdefadd(x,y):returnx+y@app.taskdefmul(x,y):returnx*y在本地运行RabbitMQ3.3.2:marcs-mbp:sbinmarcstreeter$./rabbitmq-serve
我创建虚拟主机:rabbitmqctladd_vhosttest然后用户:rabbitmqctladd_useruser123456然后我获取该用户的权限:rabbitmqctlset_permissions-ptestuser"test""test""test"我在tasks.py中使用Celery:app=Celery('tasks',broker='amqp://user:123456@localhost/test',backend='amqp://user:123456@localhost/test')然后我运行:celery-Atasksworker--loglevel=in
celery文档告诉我,如果多个任务链接在一起,第一个任务的结果将是下一个任务的第一个参数。我的问题是,当我有一个返回多个结果的任务时,我无法让它工作。例子:@task()defget_comments(url):#getthecommentsandthesubmissionandreturnthemas2objectsreturncomments,submission@taskdefrender_template(threadComments,submission):#rendertheobjectsintoahtmlfile#doesnotreturnanything现在,如果我在
我发现celery中的任务似乎“消失”了,运行时有2个节点。这似乎是随机发生的。任务是这样创建的:task=perform_advance.apply_async(...)logger.info('Taskcreated,id:{}'.format(task.task_id))当这个工作时,我会看到类似的东西:[2016-04-2101:13:02,470:INFO/Worker-8]foo.tasks.some_task[e52615da-de7a-49de-88d6-b3ca43a3383f]:任务已创建,id:eaaeb427-a167-4a78-ba39-4803e20cc75
我正在运行Django、Celery和RabbitMQ。我想要实现的是确保与一个用户相关的任务按顺序执行(具体来说,一次一个,我不希望每个用户的任务并发)每当为用户添加新任务时,它应该取决于最近添加的任务。其他功能可能包括不将任务添加到队列中,如果此类型的任务已为该用户排队但尚未开始。我做了一些研究并且:我找不到一种方法将新创建的任务与已在Celery中排队的任务链接起来,链似乎只能链接新任务。我认为这两种功能都可以使用自定义RabbitMQ消息处理程序来实现,尽管毕竟可能很难编写代码。我还阅读了有关celery-tasktree的内容,这可能是确保执行顺序的最简单方法,但是如何将新任
我想在我的celeryworker中实现任务优先级。我可以通过为高优先级任务和低优先级任务创建不同的队列来做到这一点。但我还需要将广播任务发送给所有具有广播队列且无法正常工作的工作人员。这是tasks.py文件:fromceleryimportCeleryfromkombu.commonimportBroadcast,Queue,Exchangeapp=Celery('tasks')app.conf.update(CELERY_RESULT_BACKEND='amqp',CELERY_ACCEPT_CONTENT=['json'],CELERY_TASK_SERIALIZER='jso
我关注theCeleryDjango教程和我在示例(add,mul)中看到的任务非常适合我。当我执行res=add.delay(1,2);时,我得到了正确的响应res.get()。但是当我尝试执行另一个任务时,我得到了***NotRegistered:u'pipeline.tasks.sayhello'res=sayhello.delay('trex')。如果我执行res=sayhello('trex'),那么只需键入res即可获得结果。但是通过这种方式,我在不使用Celery的情况下执行了函数。只有当我在Djangoshell./manageshell中运行它时,任务才有效>>>re
看起来celery在任务完成后不会释放内存。每次任务完成时,都会有5m-10m的内存泄漏。因此,如果有数千个任务,很快就会用完所有内存。BROKER_URL='amqp://user@localhost:5672/vhost'#CELERY_RESULT_BACKEND='amqp://user@localhost:5672/vhost'CELERY_IMPORTS=('tasks.tasks',)CELERY_IGNORE_RESULT=TrueCELERY_DISABLE_RATE_LIMITS=True#CELERY_ACKS_LATE=TrueCELERY_TASK_RESUL
我们有约300个celeryd进程在Ubuntu10.464位下运行,在空闲状态下每个进程占用约19mbRES,约174mbVIRT,因此-所有进程约有6GB的空闲RAM。处于事件状态-进程最多占用100mb的RES和~300mb的VIRT每个进程都使用了minidom(xml文件问题是-我们如何减少RAM消耗-至少对于空闲的工作人员来说,可能一些celery或python选项可能会有所帮助?如何判断哪个部分占用内存最多?UPD:那是航类搜索代理,一个机构/日期的一名工作人员。我们有10个机构,一个用户搜索==9个日期,因此每个用户搜索有10*9个代理。是否可以按需启动celeryd进