草庐IT

python - Celery 升级 (3.1->4.1) - 由对等方重置连接

我们在去年使用celery,大约有15个worker,每个worker的并发数在1-4之间。最近我们将celery从v3.1升级到v4.1现在我们在每个工作日志中都有以下错误,知道是什么导致了这样的错误吗?2017-08-2118:33:19,78094794ERRORControlcommanderror:error(104,'Connectionresetbypeer')[file:pidbox.py,line:46]Traceback(mostrecentcalllast):File"/srv/dy/venv/lib/python2.7/site-packages/celery/

python - 停止线程直到 celery 任务完成

我有一个Django网络服务器和一个用户输入信息的表单。每次表单信息发生变化时,我都会更新数据库中的模型,并且在某些东西得到验证时,我会在celery中创建一个长时间运行的任务,以便在用户单击下一步之前获得我的结果。我正在使用DjangoCelery和RabbitMQ作为代理,我的问题是什么是最合适的方法,以防任务仍然没有完成,只锁定django中的响应线程,直到任务为state.SUCCESSFUL我尝试使用AsyncResult.get方法,但它只是长时间锁定线程然后给我结果。IE不是即时的,有没有人知道如何解决这个问题? 最佳答案

python - 如何在没有全局变量的 celery 任务中设置sqlalchemy session

总结:我想在celery任务中使用sqlalchemysession,而没有包含该session的全局变量。我在一个有celery任务的项目中使用SQLAlchemy,我有目前,我有一个全局变量“session”随我的celery应用程序设置(celery.py)一起定义,并有一个工作信号来设置它。session=scoped_session(sessionmaker())@celeryd_init.connectdefconfigure_workers(sender=None,conf=None,**kwargs):#loadtheapplicationconfiguration#d

python - Celery 动态队列创建和路由

我正在尝试调用一个任务并为该任务创建一个队列(如果它不存在),然后立即将调用的任务插入到该队列中。我有以下代码:@taskdefgreet(name):return"Hello%s!"%namedefrun():result=greet.delay(args=['marc'],queue='greet.1',routing_key='greet.1')printresult.ready()然后我有一个自定义路由器:classMyRouter(object):defroute_for_task(self,task,args=None,kwargs=None):iftask=='tasks

python - celery 的困难 : function object has no property 'delay'

我最近一直在忙于软件开发,并取得了一些成功,使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

python - 从未知任务中检索 Celery 中 'task_id' 的结果

如果我之前不知道执行了哪个任务,如何提取任务的结果?这是设置:给定以下来源('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

python - 用户 rabbitmq 和 celery 的访问被拒绝

我创建虚拟主机: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

python - Celery:使用多个参数链接任务

celery文档告诉我,如果多个任务链接在一起,第一个任务的结果将是下一个任务的第一个参数。我的问题是,当我有一个返回多个结果的任务时,我无法让它工作。例子:@task()defget_comments(url):#getthecommentsandthesubmissionandreturnthemas2objectsreturncomments,submission@taskdefrender_template(threadComments,submission):#rendertheobjectsintoahtmlfile#doesnotreturnanything现在,如果我在

python - celery 随机丢失任务

我发现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

python - 如何使用 Celery、RabbitMQ 和 Django 确保每个用户的任务执行顺序?

我正在运行Django、Celery和RabbitMQ。我想要实现的是确保与一个用户相关的任务按顺序执行(具体来说,一次一个,我不希望每个用户的任务并发)每当为用户添加新任务时,它应该取决于最近添加的任务。其他功能可能包括不将任务添加到队列中,如果此类型的任务已为该用户排队但尚未开始。我做了一些研究并且:我找不到一种方法将新创建的任务与已在Celery中排队的任务链接起来,链似乎只能链接新任务。我认为这两种功能都可以使用自定义RabbitMQ消息处理程序来实现,尽管毕竟可能很难编写代码。我还阅读了有关celery-tasktree的内容,这可能是确保执行顺序的最简单方法,但是如何将新任