在使用Celery任务的Django应用程序中运行测试时,我无法完全测试需要从数据库获取数据的任务,因为它们没有连接到Django创建的测试数据库。设置task_always_eager在Celery中设置为True部分解决了这个问题,但作为documentationfortesting说,这并不能完全反射(reflect)代码将如何在真正的Celeryworker上运行并且不适合测试。如何在不设置task_always_eager=True的情况下运行Django测试时让Celery任务使用Django测试数据库? 最佳答案 简短
我将celery与django和rabbitmq一起使用来创建消息队列。我也有一个worker,它来自另一台机器。在DjangoView中,我正在开始这样的过程:defprocesstask(request,name):args=["ls","-l"]MyTask.delay(args)returnHttpResponse("Tasksettoexecute.")我的任务是这样配置的:classMyTask(Task):defrun(self,args):p=subprocess.Popen(args,stdout=subprocess.PIPE,stderr=subprocess.P
背景Windows7x64Python2.7Django1.4带Redisbundle的celery在尝试运行manage.pyceleryev时,我在终端中收到以下错误importcursesFile'c:\Python2\lib\curses\__init__.py',line15,infrom_cursesimport*ImportError:Nomodulenamed_curses我试过查看其他帖子,但未能解决这个问题。关于导致此错误的原因有什么想法吗?提前致谢。 最佳答案 根据http://docs.python.org/
UDATE3:发现了问题。请参阅下面的答案。UPDATE2:看来我可能一直在通过manage.pyshell运行djcelery教程来处理自动命名和相对导入问题,见下文。它仍然不适合我,但现在我收到新的日志错误消息。见下文。更新:我在帖子底部添加了日志。示例任务好像没有注册?原帖:我正在尝试启动并运行django-celery。我没能完成这个例子。我成功安装了rabbitmq并顺利完成了教程:http://www.rabbitmq.com/getstarted.html然后我尝试完成djcelery教程。当我运行pythonmanage.pyceleryd-linfo时,我收到消息:[
我正在尝试使用django和rabbit-mq设置celeryd。到目前为止,我已经完成了以下工作:从pip安装celery通过其存储库中可用的deb安装了rabbitmq通过rabbitmqctl向rabbitmq添加了一个用户和虚拟主机,以及该用户的权限启动rabbitmq-server通过pip安装了django-celery设置django-celery,包括它的表在settings.py中配置各种内容(BROKER_HOST、BROKER_PORT、BROKER_USER、BROKER_PASSWORD、BROKER_VHOST,以及导入djecelery、调用设置函数并将其
在不同的机器上运行worker会导致下面指定的错误。我关注了theconfigurationinstructions并同步dags文件夹。我还要确认一下,RabbitMQ和PostgreSQL只需要安装在Airflow核心机上,不需要安装在worker上(worker只连接core)。设置规范详述如下:Airflow核心/服务器计算机已安装以下内容:Python2.7与Airflow(AIRFLOW_HOME=~/airflow)celery心理治疗师2RabbitMQPostgreSQLairflow.cfg中的配置:sql_alchemy_conn=postgresql+psyco
当我将任务路由到特定队列时,它会起作用:task.apply_async(queue='beetroot')但是如果我创建一个链:chain=task|task然后我写chain.apply_async(queue='beetroot')它似乎忽略了queue关键字并分配给默认的'celery'队列。如果celery支持链式路由就好了——所有任务都在同一个队列中按顺序执行。 最佳答案 我是这样做的:subtask=task.s(*myargs,**mykwargs).set(queue=myqueue)mychain=celery.
Celery包含一个模块,该模块能够使用amqp或其他一些celery后端发出异步HTTP请求。我正在使用tornado-celery异步消息发布的生产者。据我了解tornado-celery为此使用鼠兔。问题是如何为Tornado调整celery.task.http.URL(使其成为非阻塞)。基本上有两个地方需要细化:HttpDispatch.make_request()必须使用tornado异步http客户端实现;URL.get_async(**kw)或URL.post_async(**kw)必须使用tornadoAPI以相应的非阻塞代码重新实现。例如:classNonBlocki
我正在使用Celery和RabbitMQ来处理来自API请求的数据。流程如下:请求>API>RabbitMQ>CeleryWorker>返回理想情况下,我会产生更多的celeryworker,但我受限于内存限制。目前,我的流程中的瓶颈是从传递给工作人员的URL中获取和下载数据。粗略的,流程大概是这样的:defcelery_gets_job(url):data=fetches_url(url)#takes0.1sto1.0s(bottleneck)result=processes_data(data)#takes0.1sreturnresult这是NotAcceptable,因为工作人员
我想利用Celery(使用RabbitMQ作为后端MQ)通过不同的队列执行不同风格的任务。一个要求是来自特定队列的(由工作人员)消费应该具有暂停和恢复的能力。celery,好像有thiscapability通过调用add_consumer和cancel_consumer。虽然我能够取消特定工作人员队列中任务的消费,但我无法通过调用add_consumer让工作人员恢复消费。Thecodetoreproducethisissueisprovidedhere.我的猜测可能是我缺少某种在celeryconfig中或在启动worker时通过参数提供的参数?如果能对此有一些新的看法,那就太好了。