我们使用 Celery 4.2.1 和 Redis,并为我们的任务设置了全局软超时和硬超时。我们所有的自定义任务都被设计为保持在限制范围内,但每天内置任务backend_cleanup
都会因超时而被强制终止。
我不想仅仅为了适应内置的 Celery 任务而提高全局超时。有没有办法直接设置这些内置任务的超时时间?
我很难找到任何有关此问题的文档,甚至找不到任何遇到同样问题的人。
相关资料来源celery/app/builtins.py
:
@connect_on_app_finalize
def add_backend_cleanup_task(app):
"""Task used to clean up expired results.
If the configured backend requires periodic cleanup this task is also
automatically configured to run every day at 4am (requires
:program:`celery beat` to be running).
"""
@app.task(name='celery.backend_cleanup', shared=False, lazy=False)
def backend_cleanup():
app.backend.cleanup()
return backend_cleanup
Run Code Online (Sandbox Code Playgroud) 我不断收到错误消息:redis.exceptions.ResponseError: NOAUTH Authentication required..(我正在使用 celery 执行后台任务)。
我的 settings.py 如下所示:
CELERY_BROKER_URL = 'redis://user:my_strong_password@'+REDIS_IP+':6379/0'
Run Code Online (Sandbox Code Playgroud)
我有的 docker-compose:
services:
redis:
image: redis:latest
container_name: jh_redis
ports:
- '6379:6379'
command: redis-server --appendonly yes --requirepass my_strong_password
Run Code Online (Sandbox Code Playgroud)
您可以看到我尝试提供的密码(--requirepass)与 settings.py 中显示的完全相同,但是,当 docker 启动并运行时,我仍然收到主题错误消息。
我尝试过不同的组合,例如:
--requirepass 用户:my_strong_password
但还是没用。注意:当我关闭整个命令行时 - 它可以工作(但 32 小时后 - 我收到错误消息并且它停止工作)。
docker-compose 中应该进行哪些适当的设置才能使其顺利工作?
我遇到过这样的情况,由于低质量的 C/C++ 依赖,我的工作人员时常被 SIGSEGV 杀死。在这些情况下,我需要知道哪些任务失败了。有没有办法对产生的 WorkerLostError 做出反应并了解哪个任务(例如通过 taks_id)导致工人丢失?还有其他方法可以意识到某些任务由于 SIGSEGV 而失败吗?
谢谢
我们最近从 1.8 升级到 Airflow 1.10.1,我们观察到 Airflow 服务不再在 /var/log/airflow 中写入日志
我们使用自定义命令来运行气流服务,甚至这些命令不会写入命令中指定的日志文件:-
nohup 气流调度程序 -sd /usr/airflow/DAGS --stdout /dev/null --stderr Scheduler_error.log > /dev/null 2>nohup_error.log &
nohup 气流网络服务器 -p 8080 --stdout /dev/null --stderr /usr/airflow/airflow_webserver_error.log --error_logfile -> /dev/null 2>/usr/airflow/nohup_airflow_webserver.log &
Scheduler_error.log 和airflow_webserver_error.log 文件保持为空。
服务日志机制是否在气流中被破坏?
感谢你的帮助。
我一直在查看 Celery 4.3.0 文档,但我找不到工作人员的任何类型的生命周期事件。大多数工作程序管理都是基于命令行的,但我需要一种在代码中挂钩工作程序启动事件的方法,以便我可以执行一些自定义的队列使用者分配。
Celery有这样的活动吗?
我在使用 Celery、Redis 和 Django 时遇到问题。
我正在尝试使用它们来创建一个简单的任务。
但是,任务执行后不久就会出现错误。
我将在下面指定一部分代码以便更好地理解。感谢您的关注。
CELERY_BROKER_URL = 'redis://:password@REDIS:6379/0'
CELERY_RESULT_BACKEND = 'redis://REDIS:6379/0'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_TIMEZONE = 'America/Recife'
CELERY_BEAT_SCHEDULE = {
'task-send': {
'task': 'app.tasks.task_send_email',
'schedule': crontab(hour=5, minute=44)
}
}
Run Code Online (Sandbox Code Playgroud)
控制台芹菜
[config]
app: sistema:0x7fa254a5d6f4
transport: redis://:**@redis:6379/0
results: redis://redis:6379/0
concurrency: 1 (prefork)
task events: OFF (enable -E to monitor tasks in this worker)
[queues]
exchange=celery(direct) key=celery
[tasks]
app.tasks.task_send_email
INFO/MainProcess] Connected to redis://:**@redis:6379/0
INFO/MainProcess] mingle: searching for neighbors
INFO/MainProcess] mingle: all alone
Run Code Online (Sandbox Code Playgroud)
执行任务后出现错误
RuntimeWarning: …
Run Code Online (Sandbox Code Playgroud) 如何将 Azure Redis 缓存连接到使用 celery 执行某些异步任务的 Flask WebApp?每当我尝试通过 Webjob 连接时,都会显示无法连接到 redis。
我也尝试celery inspect ping -b redis://{password}@{redis_service_name}.redis.cache.windows.net:6379/0
从这篇文章How to configure celery-redis in django project on microsoft azure? 中输入此内容?但我会得到Connection Failure: If this issue persists, ensure your computer's firewall and proxy settings allow outbound TCP traffic to port 10225. Using the firewall feature on your cache may also block connections from the console if your IP address has not been whitelisted
我一整天都在与这个作斗争。我读过几十篇 stackoverflow 和其他帖子。许多建议都不起作用,而且没有一个直接解决我想做的事情。因此,为了其他挣扎的人的利益,我将发布此内容并回答它。
想象一下你的 celery 工作任务和你的节拍调度器都工作得很好。使用默认的构造方法,您将陷入由以下定义的 2 个日志文件,例如:
celery worker ..... -f ./logs/celeryworker.log
celery beat ..... -f ./logs/celerybeat.log
Run Code Online (Sandbox Code Playgroud)
这些只会无限增长。如何引入旋转日志?
我喜欢将一条链和一个组组合在一个由不可变任务组成的小型工作流程中,并且没有结果后端。
然而,当我尝试这个 Celery 时,它会自动将其转换为和弦,然后抱怨没有结果后端。
有什么方法可以在没有结果后端的情况下让它工作吗?
代码:
@shared_task
def test_canvas():
workflow = chain(group(test_task_a.si(), test_task_b.si()), test_task_c.si())
workflow.delay()
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误消息:
raised unexpected: NotImplementedError('Starting chords requires a result backend to be configured.
Note that a group chained with a task is also upgraded to be a chord, as this pattern requires synchronization.
Result backends that supports chords: Redis, Database, Memcached, and more.',)
Run Code Online (Sandbox Code Playgroud)
有趣的是,单独运行一个链或一个组就可以了。
例子:
workflow = chain(test_task_a.si(), test_task_b.si(), test_task_c.si())
workflow.delay()
Run Code Online (Sandbox Code Playgroud) 我正在使用 django 作为我的 Web 应用程序的框架。为了使用 celery,我安装了django-celery、celery和celer[redis]。当它尝试启动 celery 工作程序时,它显示错误
无法连接到 redis://localhost:6379/0:连接到 localhost:6379 时出现错误 10061。由于目标机器主动拒绝,无法建立连接。请在 6.00 秒后重试...
我使用的是 Windows 笔记本电脑。如何启动 redis://localhost:6379/0 服务器。
This is the result of running the worker
$ celery worker -A myemail.celery -l info
-------------- celery@LAPTOP-ERVJPN6C v4.3.0 (rhubarb)
---- **** -----
--- * *** * -- Windows-10-10.0.18362-SP0 2019-12-30 19:35:13
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: myemail:0x38d56d0
- ** ---------- .> transport: redis://localhost:6379/0
- ** ---------- …
Run Code Online (Sandbox Code Playgroud)