当前位置: 首页 > 面试题库 >

Celery错误:result.get超时

应向晨
2023-03-14
问题内容

我已经安装了Celery,并且正在尝试使用Celery First Steps
Doc
对其进行测试。

我尝试将Redis和RabbitMQ都用作代理和后端,但无法获得结果:

result.get(timeout = 10)

每次,我都会收到此错误:

  Traceback (most recent call last):
  File "<input>", line 11, in <module>
  File "/home/mehdi/.virtualenvs/python3/lib/python3.4/site-packages/celery/result.py", line 169, in get
    no_ack=no_ack,
  File "/home/mehdi/.virtualenvs/python3/lib/python3.4/site-packages/celery/backends/base.py", line 225, in wait_for
    raise TimeoutError('The operation timed out.')
celery.exceptions.TimeoutError: The operation timed out.

经纪人部分似乎工作得很好:当我运行这段代码时

from celery import Celery

app = Celery('tasks', backend='redis://localhost/', broker='amqp://')

@app.task
def add(x, y):
    return x + y

result = add.delay(4,4)

我得到了(按预期)

[2015-08-04 12:05:44,910:INFO / MainProcess]收到的任务:tasks.add
[741160b8-cb7b-4e63-93c3-f5e43f8f8a02]

[2015-08-04 12:05:44,911:INFO / MainProcess]任务task.add
[741160b8-cb7b-4e63-93c3-f5e43f8f8a8]成功0.0004287530000510742s:8

PS:我正在使用Xubuntu 64bit

编辑:

我的app.conf

{'CELERY_RESULT_DB_TABLENAMES': None, 
'BROKER_TRANSPORT_OPTIONS': {}, 
'BROKER_USE_SSL': False, 
'CELERY_BROADCAST_QUEUE': 'celeryctl', 
'EMAIL_USE_TLS': False, 
'CELERY_STORE_ERRORS_EVEN_IF_IGNORED': False, 
'CELERY_CREATE_MISSING_QUEUES': True, 
'CELERY_DEFAULT_QUEUE': 'celery', 
'CELERY_SEND_TASK_SENT_EVENT': False, 
'CELERYD_TASK_TIME_LIMIT': None, 
'BROKER_URL': 'amqp://', 
'CELERY_EVENT_QUEUE_EXPIRES': None, 
'CELERY_DEFAULT_EXCHANGE_TYPE': 'direct', 
'CELERYBEAT_SCHEDULER': 'celery.beat:PersistentScheduler', 
'CELERY_MAX_CACHED_RESULTS': 100, 
'CELERY_RESULT_PERSISTENT': None, 
'CELERYD_POOL': 'prefork', 
'CELERYD_AGENT': None, 
'EMAIL_HOST': 'localhost', 
'CELERY_CACHE_BACKEND_OPTIONS': {}, 
'BROKER_HEARTBEAT': None, 
'CELERY_RESULT_ENGINE_OPTIONS': None, 
'CELERY_RESULT_SERIALIZER': 'pickle', 
'CELERYBEAT_SCHEDULE_FILENAME': 'celerybeat-schedule', 
'CELERY_REDIRECT_STDOUTS_LEVEL': 'WARNING', 
'CELERY_IMPORTS': (), 
'SERVER_EMAIL': 'celery@localhost', 
'CELERYD_TASK_LOG_FORMAT': '[%(asctime)s: %(levelname)s/%(processName)s] %(task_name)s[%(task_id)s]: %(message)s', 
'CELERY_SECURITY_CERTIFICATE': None, 
'CELERYD_LOG_COLOR': None, 
'CELERY_RESULT_EXCHANGE': 'celeryresults', 
'CELERY_TRACK_STARTED': False, 
'CELERY_REDIS_PASSWORD': None, 
'BROKER_USER': None, 
'CELERY_COUCHBASE_BACKEND_SETTINGS': None, 
'CELERY_RESULT_EXCHANGE_TYPE': 'direct', 
'CELERY_REDIS_DB': None, 
'CELERYD_TIMER_PRECISION': 1.0, 
'CELERY_REDIS_PORT': None, 
'BROKER_TRANSPORT': None, 
'CELERYMON_LOG_FILE': None, 
'CELERYD_CONCURRENCY': 0, 
'CELERYD_HIJACK_ROOT_LOGGER': True, 
'BROKER_VHOST': None, 
'CELERY_DEFAULT_EXCHANGE': 'celery', 
'CELERY_DEFAULT_ROUTING_KEY': 'celery', 
'CELERY_ALWAYS_EAGER': False, 
'EMAIL_TIMEOUT': 2, 
'CELERYD_TASK_SOFT_TIME_LIMIT': None, 
'CELERY_WORKER_DIRECT': False, 
'CELERY_REDIS_HOST': None, 
'CELERY_QUEUE_HA_POLICY': None, 
'BROKER_PORT': None, 
'CELERYD_AUTORELOADER': 'celery.worker.autoreload:Autoreloader', 
'BROKER_CONNECTION_TIMEOUT': 4, 
'CELERY_ENABLE_REMOTE_CONTROL': True, 
'CELERY_RESULT_DB_SHORT_LIVED_SESSIONS': False, 
'CELERY_EVENT_SERIALIZER': 'json', 
'CASSANDRA_DETAILED_MODE': False, 
'CELERY_REDIS_MAX_CONNECTIONS': None, 
'CELERY_CACHE_BACKEND': None, 
'CELERYD_PREFETCH_MULTIPLIER': 4, 
'BROKER_PASSWORD': None, 
'CELERY_BROADCAST_EXCHANGE_TYPE': 'fanout', 
'CELERY_EAGER_PROPAGATES_EXCEPTIONS': False, 
'CELERY_IGNORE_RESULT': False, 
'CASSANDRA_KEYSPACE': None, 
'EMAIL_HOST_PASSWORD': None, 
'CELERYMON_LOG_LEVEL': 'INFO', 
'CELERY_DISABLE_RATE_LIMITS': False, 
'CELERY_TASK_PUBLISH_RETRY_POLICY': {'interval_start': 0, 
'interval_max': 1, 
'max_retries': 3, 
'interval_step': 0.2}, 
'CELERY_SECURITY_KEY': None, 
'CELERY_MONGODB_BACKEND_SETTINGS': None, 
'CELERY_DEFAULT_RATE_LIMIT': None, 
'CELERYBEAT_SYNC_EVERY': 0, 
'CELERY_EVENT_QUEUE_TTL': None, 
'CELERYD_POOL_PUTLOCKS': True, 
'CELERY_TASK_SERIALIZER': 'pickle', 
'CELERYD_WORKER_LOST_WAIT': 10.0, 
'CASSANDRA_SERVERS': None, 
'CELERYD_POOL_RESTARTS': False, 
'CELERY_TASK_PUBLISH_RETRY': True, 
'CELERY_ENABLE_UTC': True, 
'CELERY_SEND_EVENTS': False, 
'BROKER_CONNECTION_MAX_RETRIES': 100, 
'CELERYD_LOG_FILE': None, 
'CELERYD_FORCE_EXECV': False, 
'CELERY_CHORD_PROPAGATES': True, 
'CELERYD_AUTOSCALER': 'celery.worker.autoscale:Autoscaler', 
'CELERYD_STATE_DB': None, 
'CELERY_ROUTES': None, 
'CELERYD_TIMER': None, 
'ADMINS': (), 
'BROKER_HEARTBEAT_CHECKRATE': 3.0, 
'CELERY_ACCEPT_CONTENT': ['json', 
'pickle', 
'msgpack', 
'yaml'], 
'BROKER_LOGIN_METHOD': None, 
'BROKER_CONNECTION_RETRY': True, 
'CELERY_TIMEZONE': None, 
'CASSANDRA_WRITE_CONSISTENCY': None, 
'CELERYBEAT_MAX_LOOP_INTERVAL': 0, 
'CELERYD_LOG_LEVEL': 'WARN', 
'CELERY_REDIRECT_STDOUTS': True, 
'BROKER_POOL_LIMIT': 10, 
'CELERY_SECURITY_CERT_STORE': None, 
'CELERYD_CONSUMER': 'celery.worker.consumer:Consumer', 
'CELERY_INCLUDE': (), 
'CELERYD_MAX_TASKS_PER_CHILD': None, 
'CELERYD_LOG_FORMAT': '[%(asctime)s: %(levelname)s/%(processName)s] %(message)s', 
'CELERY_ANNOTATIONS': None, 
'CELERY_MESSAGE_COMPRESSION': None, 
'CASSANDRA_READ_CONSISTENCY': None, 
'EMAIL_USE_SSL': False, 
'CELERY_SEND_TASK_ERROR_EMAILS': False, 
'CELERY_QUEUES': None, 
'CELERY_ACKS_LATE': False, 
'CELERYMON_LOG_FORMAT': '[%(asctime)s: %(levelname)s] %(message)s', 
'CELERY_TASK_RESULT_EXPIRES': datetime.timedelta(1), 
'BROKER_HOST': None, 
'EMAIL_PORT': 25, 
'BROKER_FAILOVER_STRATEGY': None, 
'CELERY_RESULT_BACKEND': 'rpc://', 
'CELERY_BROADCAST_EXCHANGE': 'celeryctl', 
'CELERYBEAT_LOG_FILE': None, 
'CELERYBEAT_SCHEDULE': {}, 
'CELERY_RESULT_DBURI': None, 
'CELERY_DEFAULT_DELIVERY_MODE': 2, 
'CELERYBEAT_LOG_LEVEL': 'INFO', 
'CASSANDRA_COLUMN_FAMILY': None, 
'EMAIL_HOST_USER': None}

问题答案:

最终与这个项目布局一起工作

proj/celery_proj/__init__.py
                /celery.py
                /tasks.py
    /test.py

哪里

Celery

from __future__ import absolute_import

from celery import Celery

app = Celery('celery_proj',
             broker='amqp://',
             backend='amqp://',
             include=['celery_proj.tasks'])

# Optional configuration, see the application user guide.
app.conf.update(
    CELERY_TASK_RESULT_EXPIRES=3600,
)

if __name__ == '__main__':
    app.start()

task.py

from __future__ import absolute_import

from celery_proj.celery import app


@app.task
def add(x, y):
    return x + y


@app.task
def mul(x, y):
    return x * y


@app.task
def xsum(numbers):
    return sum(numbers)

test.py

__author__ = 'mehdi'
path = '/home/mehdi/PycharmProjects'
import sys
sys.path.append(path)
from celery_proj.tasks import add

r = add.delay(4,4)
print(r.status)
print(r.result)

并通过以下方式启动工作人员:

cd proj
celery -A celery_proj worker -l info

然后运行test.py:

python test.py


 类似资料:
  • 问题内容: 我正在使用celery将任务发送到远程服务器,并试图将结果恢复。使用远程服务器上的update_state方法不断更新任务状态。 我正在使用发送任务 获得celery任务的结果是一个阻塞的呼叫,我不希望我的django应用程序等待结果和超时。 所以我尝试运行另一个celery任务以获取结果。 但这会导致以下错误。 有没有解决此错误的方法。是否需要运行守护进程来获取结果? 问题答案: 使

  • 我对Scala并不熟悉SBT,我正在尝试弄清楚新的IntelliJide。 已添加项目

  • 我正在运行Serenity Jbehave脚本,其中包含具有19行值的示例表,但该脚本仅执行示例表中存在的7行,并且在执行第8行时给出如下异常 控制台的堆栈跟踪为: 故事执行似乎超过了300秒的超时。有没有办法让我们在框架中将300秒重置为600秒

  • 我在用NodeMailer发邮件。我一直在成功地使用我的gmail帐户发送电子邮件。我刚刚通过GoDaddy转到了我的域名自定义电子邮件。此电子邮件通过Hotmail运行。现在我已经做了这个切换,我得到的错误是:每次连接超时。Gmail还能用,但我不能用hotmail。 有什么解决方法吗?NodeMailer有什么更好的电子邮件选择吗? 这是我的设置:

  • 我们使用的是Apache Cassandra 3.11.4。最近,我们在整个集群中看到过载的readrepair错误消息,因为我们超时了..我找不到这个问题的根本原因。感谢任何关于这个问题的投入.. 错误 [读取修复阶段:2537] 2019-07-18 17:08:15,119 卡桑德拉守护进程.java:228 - 线程中的异常[读取修复阶段:2537,5,main] 组织.apache.ca

  • 我正在尝试使用Spring Data Redis绝地组合连接到AWS ElastiCache Redis。[Redis Cluster enabled,因此它有Cluster Config endpoint,有3个碎片-每个碎片有1个主节点和2个副本节点] 读取超时错误。 AWS Redis服务器版本:5.0.3/群集模式:已启用/SSL:已启用/Auth:已启用(通过密码) 库——Spring数