[REDIS] 셀러리 오류 : result.get은 시간 초과
REDIS셀러리 오류 : result.get은 시간 초과
나는 셀러리를 설치했고 나는 셀러리 첫 단계 문서로를 테스트하기 위해 노력하고있어.
나는 브로커와 백엔드로 모두 레디 스 및 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)
내가 할 (예상대로)
P.S : 나는 분투 64 비트를 사용하고 있습니다
편집하다 :
내 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}
해결법
-
==============================
1.작업의 수정 후에는 다시 읽기 변화에 셀러리를 다시 시작해야합니다.
작업의 수정 후에는 다시 읽기 변화에 셀러리를 다시 시작해야합니다.
-
==============================
2.마지막으로이 프로젝트 레이아웃과 협력
마지막으로이 프로젝트 레이아웃과 협력
proj/celery_proj/__init__.py /celery.py /tasks.py /test.py
어디
celery.py
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()
tasks.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
-
==============================
3.'백엔드'구성을 더 이상 셀러리 개체로 전달 될 수 없다 임의의 파라미터가 있지만, 파이썬 구성 파라미터 CELERY_RESULT_BACKEND 통과한다 (https://github.com/celery/celery/issues/2146 참조).
'백엔드'구성을 더 이상 셀러리 개체로 전달 될 수 없다 임의의 파라미터가 있지만, 파이썬 구성 파라미터 CELERY_RESULT_BACKEND 통과한다 (https://github.com/celery/celery/issues/2146 참조).
(셀러리 튜토리얼에서)를 tasks.py 같은 보일 것이다 그래서 :
from celery import Celery app = Celery('tasks', broker='amqp://guest@localhost//') app.config_from_object('celeryconfig') @app.task def add(x, y): print '[' + str(x) + '][' + str(y) + ']=' + str(x+y) return x + y
다음과 같은 내용 tasks.py과 같은 디렉토리에 파일 celeryconfig.py을 만듭니다
CELERY_RESULT_BACKEND='amqp://'
-
==============================
4.작업 상태가 준비 될 때까지 차단됩니다 대신 AsyncResult.get 이후 AsyncResult.get () (의에 app.backend.get_result (result.id))를 사용하지만 작업은 이미 완료 실행하고있다
작업 상태가 준비 될 때까지 차단됩니다 대신 AsyncResult.get 이후 AsyncResult.get () (의에 app.backend.get_result (result.id))를 사용하지만 작업은 이미 완료 실행하고있다
from https://stackoverflow.com/questions/31806428/celery-error-result-get-times-out by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 레디 스 루아 스크립트에서 함수를 여러 번 호출 질수 (0) | 2020.01.08 |
---|---|
[REDIS] 어떻게 gRPC에서 서버에서 클라이언트로 방송하는? (0) | 2020.01.08 |
[REDIS] 루아 스크립트는 레디 스 HGETALL 통화에서 효율적인 사전을 반환 (0) | 2020.01.08 |
[REDIS] 파이프 라인 명령에 대한 응답을 비활성화 레디 스 수 있습니까? (0) | 2020.01.08 |
[REDIS] 어떻게 레디 스는 캐시 된 데이터 또는 DB에서 신선한 데이터를 반환 할 경우 알아가는 것 (0) | 2020.01.08 |