草庐IT

celery-log

全部标签

python celery : Retrieve tasks arguments if there's an exception

我开始使用Celery和Python,我有一个问题可能很简单,但我似乎找不到任何合适的答案......如果我有一堆任务,其中一个抛出异常,有没有办法检索传递给所述任务的参数?例如,如果我想获取一些主机名解析到的IP,然后创建一个任务...@tasks_app.taskdefresolve_hostname(hostname):return(hostname,{hst.addressforhstindns.resolver.query(hostname)})...这可能会引发异常,有没有办法在异常发生时在调用之外获取该hostname参数的值?假设我将任务分组如下:ip_subtasks

python - 在 Celery 中获取 worker ID

我想使用Celery在具有四张Tesla卡的GPU服务器上运行作业。我用一个由四个worker组成的池运行Celeryworker,这样每张卡总是运行一项工作。我的问题是如何指示worker每人领取一个GPU。目前我依赖于工作进程都应该有连续进程ID的假设:device_id=os.getpid()%self.ndevices但是,我不能保证它总是有效,即当工作进程随着时间的推移重新启动时。所以理想情况下,我想直接获取每个worker的ID。有人可以告诉我是否可以从任务中检查工作人员,或者可以建议一种不同的解决方案来跨GPU分配作业?​​ 最佳答案

python - Django、RabbitMQ 和 Celery - 为什么在我更新开发中的 Django 代码后 Celery 运行我的任务的旧版本?

所以我有一个Django应用程序,它偶尔会向Celery发送一个任务以进行异步执行。我发现当我在开发中处理我的代码时,Django开发服务器知道如何自动检测代码何时发生更改,然后重新启动服务器以便我可以看到我的更改。但是,我的应用程序的RabbitMQ/Celery部分没有接受这些开发中的变化。如果我更改稍后将在Celery任务中运行的代码,Celery仍将继续运行旧版本的代码。我能让它接受变化的唯一方法是:停止celeryworker停止RabbitMQ重置RabbitMQ启动RabbitMQ将用户添加到我的Django应用配置为使用的RabbitMQ为此用户设置适当的权限重启Cel

python - 使用依赖图执行 Celery 任务

我希望Celery任务依赖于2个或更多其他任务的结果。我调查了Python+Celery:Chainingjobs?和http://pypi.python.org/pypi/celery-tasktree,但只有当任务只有一个依赖任务时,这些才是好的。我知道TaskSet,但似乎没有办法在TaskSetResult.ready()变为True时立即执行回调。我现在想到的是有一个周期性任务,每隔几[毫秒]秒左右轮询一次TaskSetResult.ready()并在回调返回True时触发回调,但这对我来说听起来很不雅观。有什么建议吗? 最佳答案

python - Heroku Flask 应用程序中的 Celery/CloudAMQP 错误

我在Heroku(免费层)上运行Flask应用程序,在使用apply_async安排任务时遇到了一些问题。如果我安排了两个以上的任务,我会得到一个很长的堆栈跟踪,但有一个异常(exception):AccessRefused(403,u"ACCESS_REFUSED-accesstoexchange'celeryresults'invhost'rthtwchf'refusedforuser'rthtwchf'",(40,10),'Exchange.declare')奇怪的是前两个任务(在重新启动我的所有进程之前)似乎总是毫无问题地完成。搜索引擎的一点点调查让我找到了https://st

python - celery block 内链

我想在celery链命令中使用block。chain=task1.s(arg1)|task2.chunks(?,CHUNK_SIZE)|task3.chunks(?,CHUNK_SIZE)基本上我想做的是运行task1,将其结果分block并将分block发送到task2,然后task2应该调用task3,task3也应该从task2接收分block结果以完成该过程。为什么?因为task1和task2都可以返回相当数量的项目,我想分批处理这些项目。上面的代码不起作用,因为我不太确定用什么代替问号才能使其起作用。我不太确定这是否可行,因为搜索没有提供太多结果,所以如果无法构建这样的工作流

python - 找出差异,Celery 任务随机失败且没有错误

我的一些RemoteCelery任务似乎永远不会到达我的经纪人(RabbitMQ)。这似乎是随机发生的。我的日志中没有NO错误,它们永远不会到达工作人员或失败。Flower/Rabbit从不报告任务失败。我使用tcpflow-p-c-ieth0port5672来监控API上发送任务(client)的流量。当API成功发送任务时,外出流量记录如下:(已删除敏感数据)192.018.000.002.42738-052.048.150.171.05672:AMQP052.048.150.171.05672-192.018.000.002.42738:capabilitiesFpublishe

python - Celery v4 没有按预期路由任务

我正在将我的celeryworker从celeryv3更新到celeryv4,我的所有任务都是基于类的任务。Ihavemanuallyregisteredthetasks因为这是升级文档中的指示。问题出在任务路由中,我有以下任务:classRegisterTask(Task):routing_key='app_server.register'defrun(**params):whatever...我正在运行两个celeryworker,一个在默认队列中,另一个在注册队列中,如下所示:#DefaultWorkercelery-Aapp_serverworker--loglevel=inf

python - 以 SQLite 作为代理的 Celery + Flask,调用任务时出错

我正在尝试让Flask与以SQLite作为后端的Celery一起工作。但是,使用以下代码:CELERY_BROKER_URL='sqla+sqlite:///'+os.path.join(basedir,'celery.db')defmake_celery(app):celery=Celery(app.import_name,broker=app.config['CELERY_BROKER_URL'])celery.conf.update(app.config)TaskBase=celery.TaskclassContextTask(TaskBase):abstract=Truedef

python - 如果参数和任务名称已经在服务器中排队,是否可以跳过委派 celery 任务?

假设我有这个任务:defdo_stuff_for_some_time(some_id):e=Model.objects.get(id=some_id)e.domanystuff()我是这样使用它的:do_stuff_for_some_time.apply_async(args=[some_id],queue='some_queue')我面临的问题是,有很多具有相同arg参数的重复性任务,这让队列陷入困境。只有当相同的参数和相同的任务不在队列中时才可以应用异步吗? 最佳答案 celery-singleton解决了这个需求警告:需要re