我正在开发一个Django应用程序。我们正在使用celery对Mongo数据库的写入进行排队。我正在尝试为一个在celery中排队的函数编写一个功能测试(使用Selenium)。问题是celery写入主Mongo数据库而不是测试数据库。如何设置我的功能测试以使用写入测试数据库的celery实例?我们使用'django_nose.NoseTestSuiteRunner'作为我们的TEST_RUNNER。更新:我无法弄清楚如何使用另一个celery实例进行测试,但我找到了一种绕过celery进行功能测试的方法。在我的settings.py中:FUNC_TEST_COMMAND=['func
我在我的Mac(OS/X10.13.4)上本地运行RabbitMQ和Celery,当我运行add.delay(x,y)时,以下代码在本地运行:#!/usr/bin/envpythonfromceleryimportCeleryfromcelery.utils.logimportget_task_loggerlogger=get_task_logger(__name__)app=Celery('tasks',\broker='pyamqp://appuser:xx@c2/appvhost',\backend='db+mysql://appuser:xx@c2/pigpen')@app.t
我有一个CPU密集型Celery任务。我想使用跨大量EC2实例的所有处理能力(核心)来更快地完成这项工作(具有多处理功能的celery并行分布式任务-我认为)。线程、多处理、分布式计算、分布式并行处理这些术语都是我的术语试图更好地理解。示例任务:@app.taskforiteminlist_of_millions_of_ids:id=item#dosomelongcomplicatedequationhereveryCPUheavy!!!!!!!database.objects(newid=id).save()使用上面的代码(如果可能的话,还有一个例子)之前人们会如何使用Celery分
对于这样的任务:fromcelery.decoratorsimporttask@task()defadd(x,y):ifnotxornoty:raiseException("testerror")returnself.wait_until_server_responds(如果它抛出异常并且我想从守护进程重试它,如何应用指数退避算法,即在2^2,2^3,2^4等秒之后?也是从服务器端维护重试,这样如果worker碰巧被杀死,那么下一个产生的worker将接受重试任务? 最佳答案 task.request.retries属性包含到目前为
我正在使用celery和django-celery。我已经定义了一个我想测试的定期任务。是否可以手动从shell运行定期任务以便查看控制台输出? 最佳答案 您是否尝试过仅从Djangoshell运行任务?您可以使用任务的.apply方法来确保它在本地快速运行。假设任务在tasks子模块中的Django应用myapp中称为my_task:$pythonmanage.pyshell>>>frommyapp.tasksimportmy_task>>>eager_result=my_task.apply()结果实例与通常的AsyncResu
我无法理解“分布式任务队列”的用途。比如python的celerylibrary.我知道在celery(python框架)中,您可以为函数设置定时窗口来执行。但是,这也可以在针对python脚本的linuxcrontab中轻松完成。据我所知,从我自己的django-celerywebapps中可以看出,celery比仅仅设置一个原始的crontab消耗更多的RAM内存。对于一个相对较小的应用程序来说只有几百MB的差异。有人可以帮我解决这个问题吗?或许对任务队列/crontab的一般工作方式进行高级解释也会很好。谢谢。 最佳答案 这取
我一直在阅读文档并进行搜索,但似乎找不到直接的答案:你能取消一个已经在执行的任务吗?(因为任务已经开始,需要一段时间,中途需要取消)我是从位于CeleryFAQ的文档中找到的>>>result=add.apply_async(args=[2,2],countdown=120)>>>result.revoke()但我不清楚这是否会取消排队的任务,或者是否会杀死工作人员上正在运行的进程。感谢您提供的任何启发! 最佳答案 revoke取消任务执行。如果任务被撤销,工作人员会忽略该任务并且不执行它。如果您不使用持久撤销,您的任务可以在工作人
如何检查一项任务是否在celery中运行(具体来说,我使用的是celery-django)?我已经阅读了文档,并在谷歌上搜索过,但我没有看到类似的调用:my_example_task.state()==RUNNING我的用例是我有一个用于转码的外部(java)服务。当我发送要转码的文档时,我想检查运行该服务的任务是否正在运行,如果没有,则(重新)启动它。我相信我正在使用当前的稳定版本-2.4。 最佳答案 返回task_id(由.delay()给出),然后向celery实例询问状态:x=method.delay(1,2)printx.
我正在尝试为Java环境寻找一个与Celery项目等效的项目,我已经查看了SpringBatch,但是对于分布式任务队列有没有更好的替代方案。谢谢。 最佳答案 Celery所做的非常类似于EIP,和SEDA具有方便的任务调度...(您剩下要做的就是添加一些数据库和异步HTTP网络,您就拥有了完整的企业级质量堆栈)。Java中基本上有Spring方式、JavaEE方式和Hadoop方式:Spring:Spring集成+SpringBatch+RabbitMQJavaEE:Mule+Quartz或EJB调度+HornetMQHadoop
我有一个运行Django应用程序的dockerized设置,我在其中使用Celery任务。Celery使用Redis作为代理。版本控制:Docker版本17.09.0-ce,构建afdb6d4docker-compose版本1.15.0,构建e12f3b9Django==1.9.6django-celery-beat==1.0.1celery==4.1.0celery[redis]redis==2.10.5问题:我的celeryworker似乎无法连接到位于localhost:6379的redis容器。我能够在指定端口上远程登录到redis服务器。我能够验证redis-server是否