Tag: 芹菜

找出是否存在芹菜任务

是否有可能找出具有特定任务ID的任务是否存在? 当我试图获得地位时,我会一直等待。 >>> AsyncResult('…').status 'PENDING' 我想知道一个给定的任务ID是否是一个真正的芹菜任务ID,而不是一个随机的string。 我想要不同的结果取决于是否有一个有效的任务为一个特定的ID。 在过去可能有相同的ID有效的任务,但结果可能已经从后端删除。

为什么使用Celery运行计划任务优于crontab?

考虑到芹菜已经是运行任务队列的堆栈的一部分(即它不会被添加只是为了运行crons,这似乎是一个矫枉过正的恕我直言)。 它的“周期性任务”function如何可以作为crontab的替代品? 具体寻找以下几点。 主要优点/缺点crontab 使用芹菜比crontab更好的select Django具体使用案例:芹菜vs crontab运行基于django的周期性任务,当芹菜已被包含在堆栈中作为django- django-celery队列django任务。

如何dynamic添加/删除周期性任务到芹菜(celerybeat)

如果我有一个函数定义如下: def add(x,y): return x+y 有没有办法dynamic地添加这个函数作为芹菜PeriodicTask并在运行时启动它? 我想能够做一些像(伪代码): some_unique_task_id = celery.beat.schedule_task(add, run_every=crontab(minute="*/30")) celery.beat.start(some_unique_task_id) 我也想用(伪代码)之类的东西来dynamic地停止或删除这个任务: celery.beat.remove_task(some_unique_task_id) 要么 celery.beat.stop(some_unique_task_id) 仅供参考我不使用djcelery,它允许您通过djangopipe理员pipe理定期任务。

用芹菜运行“独特”的任务

我使用芹菜更新我的新闻汇总站点的RSS订阅源。 我为每个feed使用一个@task,而且事情似乎很好。 有一个细节我不确定如何处理:所有的提要每分钟更新一次@periodic_task,但是如果一个提要仍然从最后一个定期任务更新,当一个新的启动? (例如,如果Feed非常慢或脱机,并且任务被保留在重试循环中) 目前我存储任务结果并检查他们的状态,如下所示: import socket from datetime import timedelta from celery.decorators import task, periodic_task from aggregator.models import Feed _results = {} @periodic_task(run_every=timedelta(minutes=1)) def fetch_articles(): for feed in Feed.objects.all(): if feed.pk in _results: if not _results[feed.pk].ready(): # The task is not finished yet continue _results[feed.pk] = update_feed.delay(feed) @task() def update_feed(feed): try: feed.fetch_articles() except socket.error, […]

芹菜任务,运行更多的任务

我正在使用celerybeat来启动一系列辅助任务的主要任务。 我已经完成了两项任务。 有没有办法轻松做到这一点? Celery是否允许从任务内运行任务? 我的例子: @task def compute(users=None): if users is None: users = User.objects.all() tasks = [] for user in users: tasks.append(compute_for_user.subtask((user.id,))) job = TaskSet(tasks) job.apply_async() # raises a IOError: Socket closed @task def compute_for_user(user_id): #do some stuff compute从celerybeat调用,但是当它尝试运行apply_async时会导致IOError。 有任何想法吗?

如何在不同的机器上安置芹菜工?

我是芹菜新手。我知道如何安装和运行一台服务器,但是我需要将这个任务分配给多台机器。 我的项目使用芹菜分配用户请求传递到一个Web框架不同的机器,然后返回结果。 我阅读文档,但没有提到如何设置多台机器。 我错过了什么?

Celery with RabbitMQ:AttributeError:'DisabledBackend'对象没有属性'_get_task_meta_for'

我正在运行芹菜教程的第一步 。 我们定义以下任务: from celery import Celery app = Celery('tasks', broker='amqp://guest@localhost//') @app.task def add(x, y): return x + y 然后调用它: >>> from tasks import add >>> add.delay(4, 4) 但是我得到以下错误: AttributeError: 'DisabledBackend' object has no attribute '_get_task_meta_for' 我正在运行芹菜工和rabbit-mq服务器。 奇怪的是,芹菜工作者报告这个任务是成功的: [2014-04-22 19:12:03,608: INFO/MainProcess] Task test_celery.add[168c7d96-e41a-41c9-80f5-50b24dcaff73] succeeded in 0.000435483998444s: 19 为什么这不起作用?

如何禁止在芹菜腌制序列化

Celery默认使用pickle作为任务的序列化方法。 正如常见问题中所述,这代表了一个安全漏洞。 Celery允许您使用CELERY_TASK_SERIALIZERconfiguration参数configuration如何序列化任务。 但这并不能解决安全问题。 即使任务使用JSON或类似的方式进行序列化,工作人员仍然会使用pickle序列化执行插入到队列中的任务 – 它们只是响应消息中的content-type参数。 因此,任何可以写入任务队列的人都可以通过编写恶意的pickle对象来有效地执行worker进程。 我怎样才能防止工作线程运行任务序列化与泡菜?

优点和缺点使用芹菜与RQ

目前我正在从事python项目,需要实现一些后台作业(主要是电子邮件发送和大量数据库更新)。 我使用Redis进行任务代理。 所以在这一点上,我有两个候选人: 芹菜和RQ 。 我对这些工作队伍有一些经验,但我想请你们分享一下使用这些工具的经验。 所以。 什么优点和缺点使用芹菜与RQ。 任何适合使用芹菜与RQ的项目/任务的例子。 芹菜看起来相当复杂,但它是全function的解决scheme。 其实我不认为我需要所有这些function。 从另一方来说,RQ非常简单(例如configuration,集成),但它似乎缺less一些有用的function(例如任务撤销,代码自动重装)

首次更改主机名后,rabbitmq-server无法启动

我为我的Django项目使用了django-芹菜。 最后一天,我改变了我的电脑的主机名(我使用的是Ubuntu 12.04,编辑文件“/ etc / hostname”),并在下次重新启动后,django-celery出现故障 Consumer: Connection Error: [Errno 111] Connection refused. Trying again in 4 seconds… 经过对这个错误的一些研究,我可以发现,改变我的主机名从这里引起这个错误。 我的rabbitmq启动日志显示 文件:/ var / log / rabbitmq / startup_log Activating RabbitMQ plugins … ******************************************************************************** ******************************************************************************** 0 plugins activated: ERROR: epmd error for host "jinesh": nxdomain (non-existing domain) 我的startup_err文件是空的。 当我跑步 root@jinesh:/home/jinesh# rabbitmqctl list_users Listing users … Error: […]