Celery: تعطل عامل الكرفس بعد المهمة الأولى مع الخطأ من النوع: الكائن "NoneType" غير قابل للاستدعاء

تم إنشاؤها على ٢٤ نوفمبر ٢٠١٦  ·  54تعليقات  ·  مصدر: celery/celery

قائمة تدقيق

  • [X] لقد قمت بتضمين ناتج celery -A proj report في الإصدار.
    (إذا لم تكن قادرًا على القيام بذلك ، فعليك على الأقل تحديد الكرفس
    النسخة المتأثرة).
software -> celery:4.0.0 (latentcall) kombu:4.0.0 py:3.4.3
            billiard:3.5.0.2 py-amqp:2.1.1
platform -> system:Linux arch:64bit, ELF imp:CPython
loader   -> celery.loaders.default.Loader
settings -> transport:amqp results:disabled
  • [X] لقد تحققت من وجود المشكلة في فرع الكرفس master .
    نعم لقد اختبرت ويتصرف بنفس الطريقة باستخدام السيد.

خطوات التكاثر

لست متأكدًا تمامًا ، لأن الأجهزة الأخرى بنفس المواصفات والمتطلبات تعمل.

سلوك متوقع

يجب أن تستهلك المهام.

السلوك الفعلي

يتم قبول المهمة ، ثم يتم تسجيل التتبع ، ثم يعيد العامل الاتصال بالوسيط لسبب ما. هذا يتكرر إلى الأبد:

[2016-11-23 23:09:00,468: INFO/MainProcess] Connected to amqp://user:**@10.136.131.6:5672//
[2016-11-23 23:09:00,484: INFO/MainProcess] mingle: searching for neighbors
[2016-11-23 23:09:01,921: INFO/MainProcess] mingle: sync with 1 nodes
[2016-11-23 23:09:01,922: INFO/MainProcess] mingle: sync complete
[2016-11-23 23:09:01,970: INFO/MainProcess] Received task: tasks.calculate_user_running_total[ddd103af-d527-4564-83f8-96b747767a0c]
[2016-11-23 23:09:01,972: CRITICAL/MainProcess] Unrecoverable error: TypeError("'NoneType' object is not callable",)
Traceback (most recent call last):
  File "./venv/lib/python3.4/site-packages/celery/worker/worker.py", line 203, in start
    self.blueprint.start(self)
  File "./venv/lib/python3.4/site-packages/celery/bootsteps.py", line 119, in start
    step.start(parent)
  File "./venv/lib/python3.4/site-packages/celery/bootsteps.py", line 370, in start
    return self.obj.start()
  File "./venv/lib/python3.4/site-packages/celery/worker/consumer/consumer.py", line 318, in start
    blueprint.start(self)
  File "./venv/lib/python3.4/site-packages/celery/bootsteps.py", line 119, in start
    step.start(parent)
  File "./venv/lib/python3.4/site-packages/celery/worker/consumer/consumer.py", line 584, in start
    c.loop(*c.loop_args())
  File "./venv/lib/python3.4/site-packages/celery/worker/loops.py", line 47, in asynloop
    consumer.consume()
  File "./venv/lib/python3.4/site-packages/kombu/messaging.py", line 470, in consume
    self._basic_consume(T, no_ack=no_ack, nowait=False)
  File "./venv/lib/python3.4/site-packages/kombu/messaging.py", line 591, in _basic_consume
    no_ack=no_ack, nowait=nowait)
  File "./venv/lib/python3.4/site-packages/kombu/entity.py", line 737, in consume
    arguments=self.consumer_arguments)
  File "./venv/lib/python3.4/site-packages/amqp/channel.py", line 1578, in basic_consume
    wait=None if nowait else spec.Basic.ConsumeOk,
  File "./venv/lib/python3.4/site-packages/amqp/abstract_channel.py", line 73, in send_method
    return self.wait(wait, returns_tuple=returns_tuple)
  File "./venv/lib/python3.4/site-packages/amqp/abstract_channel.py", line 93, in wait
    self.connection.drain_events(timeout=timeout)
  File "./venv/lib/python3.4/site-packages/amqp/connection.py", line 464, in drain_events
    return self.blocking_read(timeout)
  File "./venv/lib/python3.4/site-packages/amqp/connection.py", line 469, in blocking_read
    return self.on_inbound_frame(frame)
  File "./venv/lib/python3.4/site-packages/amqp/method_framing.py", line 88, in on_frame
    callback(channel, msg.frame_method, msg.frame_args, msg)
  File "./venv/lib/python3.4/site-packages/amqp/connection.py", line 473, in on_inbound_method
    method_sig, payload, content,
  File "./venv/lib/python3.4/site-packages/amqp/abstract_channel.py", line 142, in dispatch_method
    listener(*args)
  File "./venv/lib/python3.4/site-packages/amqp/channel.py", line 1613, in _on_basic_deliver
    fun(msg)
  File "./venv/lib/python3.4/site-packages/kombu/messaging.py", line 617, in _receive_callback
    return on_m(message) if on_m else self.receive(decoded, message)
  File "./venv/lib/python3.4/site-packages/celery/worker/consumer/consumer.py", line 558, in on_task_received
    callbacks,
  File "./venv/lib/python3.4/site-packages/celery/worker/strategy.py", line 145, in task_message_handler
    handle(req)
  File "./venv/lib/python3.4/site-packages/celery/worker/worker.py", line 221, in _process_task_sem
    return self._quick_acquire(self._process_task, req)
  File "./venv/lib/python3.4/site-packages/kombu/async/semaphore.py", line 62, in acquire
    callback(*partial_args, **partial_kwargs)
  File "./venv/lib/python3.4/site-packages/celery/worker/worker.py", line 226, in _process_task
    req.execute_using_pool(self.pool)
  File "./venv/lib/python3.4/site-packages/celery/worker/request.py", line 532, in execute_using_pool
    correlation_id=task_id,
  File "./venv/lib/python3.4/site-packages/celery/concurrency/base.py", line 155, in apply_async
    **options)
  File "./venv/lib/python3.4/site-packages/billiard/pool.py", line 1487, in apply_async
    self._quick_put((TASK, (result._job, None, func, args, kwds)))
TypeError: 'NoneType' object is not callable

يتم تكرار الأسطر أعلاه كل بضع ثوانٍ ولا يتم استهلاك أي مهام من قائمة الانتظار.

التعليق الأكثر فائدة

👍 لهذا. الحصول على نفس المشكلة ، حتى على 4.0.1

ال 54 كومينتر

الخطأ يتكرر في السجل بسبب تعطل البرنامج الخفي لعامل الكرفس ، لذلك يقوم systemd بإعادة تشغيله.

ask ، self._quick_put بطريقة ما غير معرّف. هل يجب أن تتحقق البلياردو من قيمة None قبل الاتصال ، أو أن تلتقط الاستثناء ، أم يجب ألا تكون self._quick_put أبدًا None ؟

عندما أقوم بتغيير البلياردو / pool.py # L1483 إلى if self.threads or self._quick_put is None: لم يعد يتعطل الكرفس بعد الآن ولكن لسبب ما لا يقوم العمال مطلقًا بمعالجة أي مهام.

المزيد من الإخراج المطول مع DEBUG مستوى التسجيل:

[2016-11-27 14:48:09,875: DEBUG/MainProcess] | Worker: Preparing bootsteps.
[2016-11-27 14:48:09,877: DEBUG/MainProcess] | Worker: Building graph...
[2016-11-27 14:48:09,878: DEBUG/MainProcess] | Worker: New boot order: {Timer, Hub, Pool, Autoscaler, StateDB, Beat, Consumer}
[2016-11-27 14:48:09,889: DEBUG/MainProcess] | Consumer: Preparing bootsteps.
[2016-11-27 14:48:09,889: DEBUG/MainProcess] | Consumer: Building graph...
[2016-11-27 14:48:09,898: DEBUG/MainProcess] | Consumer: New boot order: {Connection, Agent, Events, Mingle, Tasks, Control, Gossip, Heart, event loop}
[2016-11-27 14:48:09,908: DEBUG/MainProcess] | Worker: Starting Hub
[2016-11-27 14:48:09,908: DEBUG/MainProcess] ^-- substep ok
[2016-11-27 14:48:09,908: DEBUG/MainProcess] | Worker: Starting Pool
[2016-11-27 14:48:09,998: DEBUG/MainProcess] ^-- substep ok
[2016-11-27 14:48:09,999: DEBUG/MainProcess] | Worker: Starting Consumer
[2016-11-27 14:48:10,000: DEBUG/MainProcess] | Consumer: Starting Connection
[2016-11-27 14:48:10,016: DEBUG/MainProcess] Start from server, version: 0.9, properties: {'cluster_name': 'rabbit<strong i="6">@rabbitmq</strong>', 'product': 'RabbitMQ', 'version': '3.5.6', 'information': 'Licensed under the MPL.
  See http://www.rabbitmq.com/', 'capabilities': {'authentication_failure_close': True, 'consumer_priorities': True, 'consumer_cancel_notify': True, 'per_consumer_qos': True, 'basic.nack': True, 'publisher_confirms': True, 'connection.blocked': True, 'exchange_exchange_bindings': True}, 'copyright': 'Copyright (C) 2007-2015 Pivotal Software, Inc.', 'platform': 'Erlang/OTP'}, mechanisms: ['AMQPLAIN', 'PLAIN'], locales: ['en_US']
[2016-11-27 14:48:10,018: INFO/MainProcess] Connected to amqp://user:**@10.136.131.6:5672//
[2016-11-27 14:48:10,018: DEBUG/MainProcess] ^-- substep ok
[2016-11-27 14:48:10,019: DEBUG/MainProcess] | Consumer: Starting Events
[2016-11-27 14:48:10,031: DEBUG/MainProcess] Start from server, version: 0.9, properties: {'cluster_name': 'rabbit<strong i="7">@rabbitmq</strong>', 'product': 'RabbitMQ', 'version': '3.5.6', 'information': 'Licensed under the MPL.  See http://www.rabbitmq.com/', 'capabilities': {'authentication_failure_close': True, 'consumer_priorities': True, 'consumer_cancel_notify': True, 'per_consumer_qos': True, 'basic.nack': True, 'publisher_confirms': True, 'connection.blocked': True, 'exchange_exchange_bindings': True}, 'copyright': 'Copyright (C) 2007-2015 Pivotal Software, Inc.', 'platform': 'Erlang/OTP'}, mechanisms: ['AMQPLAIN', 'PLAIN'], locales: ['en_US']
[2016-11-27 14:48:10,034: DEBUG/MainProcess] ^-- substep ok
[2016-11-27 14:48:10,034: DEBUG/MainProcess] | Consumer: Starting Mingle
[2016-11-27 14:48:10,035: INFO/MainProcess] mingle: searching for neighbors
[2016-11-27 14:48:10,036: DEBUG/MainProcess] using channel_id: 1
[2016-11-27 14:48:10,041: DEBUG/MainProcess] Channel open
[2016-11-27 14:48:10,061: DEBUG/MainProcess] Start from server, version: 0.9, properties: {'cluster_name': 'rabbit<strong i="8">@rabbitmq</strong>', 'product': 'RabbitMQ', 'version': '3.5.6', 'information': 'Licensed under the MPL.  See http://www.rabbitmq.com/', 'capabilities': {'authentication_failure_close': True, 'consumer_priorities': True, 'consumer_cancel_notify': True, 'per_consumer_qos': True, 'basic.nack': True, 'publisher_confirms': True, 'connection.blocked': True, 'exchange_exchange_bindings': True}, 'copyright': 'Copyright (C) 2007-2015 Pivotal Software, Inc.', 'platform': 'Erlang/OTP'}, mechanisms: ['AMQPLAIN', 'PLAIN'], locales: ['en_US']
[2016-11-27 14:48:10,063: DEBUG/MainProcess] using channel_id: 1
[2016-11-27 14:48:10,064: DEBUG/MainProcess] Channel open
[2016-11-27 14:48:11,189: INFO/MainProcess] mingle: sync with 3 nodes
[2016-11-27 14:48:11,190: DEBUG/MainProcess] mingle: processing reply from celery<strong i="9">@worker03</strong>
[2016-11-27 14:48:11,190: DEBUG/MainProcess] mingle: processing reply from celery<strong i="10">@worker02</strong>
[2016-11-27 14:48:11,190: DEBUG/MainProcess] mingle: processing reply from celery<strong i="11">@worker01</strong>
[2016-11-27 14:48:11,190: INFO/MainProcess] mingle: sync complete
[2016-11-27 14:48:11,191: DEBUG/MainProcess] ^-- substep ok
[2016-11-27 14:48:11,191: DEBUG/MainProcess] | Consumer: Starting Tasks
[2016-11-27 14:48:11,244: DEBUG/MainProcess] ^-- substep ok
[2016-11-27 14:48:11,244: DEBUG/MainProcess] | Consumer: Starting Control
[2016-11-27 14:48:11,244: DEBUG/MainProcess] using channel_id: 2
[2016-11-27 14:48:11,246: DEBUG/MainProcess] Channel open
[2016-11-27 14:48:11,251: DEBUG/MainProcess] ^-- substep ok
[2016-11-27 14:48:11,251: DEBUG/MainProcess] | Consumer: Starting Gossip
[2016-11-27 14:48:11,252: DEBUG/MainProcess] using channel_id: 3
[2016-11-27 14:48:11,253: DEBUG/MainProcess] Channel open
[2016-11-27 14:48:11,257: DEBUG/MainProcess] ^-- substep ok
[2016-11-27 14:48:11,258: DEBUG/MainProcess] | Consumer: Starting Heart
[2016-11-27 14:48:11,259: DEBUG/MainProcess] using channel_id: 1
[2016-11-27 14:48:11,260: DEBUG/MainProcess] Channel open
[2016-11-27 14:48:11,261: DEBUG/MainProcess] ^-- substep ok
[2016-11-27 14:48:11,261: DEBUG/MainProcess] | Consumer: Starting event loop
[2016-11-27 14:48:11,264: INFO/MainProcess] Received task: wakatime.tasks.cache_coding_activity[0eba267c-72e4-40ea-91dd-a1a7ab17c514]
[2016-11-27 14:48:11,265: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x7ff469300950> (args:('wakatime.tasks.cache_coding_activity', '0eba267c-72e4-40ea-91dd-a1a7ab17c514', {'argsrepr': '()', 'task': 'wakatime.tasks.cache_coding_activity', 'lang': 'py', 'parent_id': '81f0c7ce-1396-496f-bf64-ae243736c845', 'timelimit': [None, None], 'root_id': '128647cc-f558-4b7d-bafc-338d186b5cfa', 'reply_to': 'e3c2b067-a058-3aa0-a3a1-384d4b917bbf', 'retries': 0, 'expires': None, 'delivery_info': {'exchange': '', 'priority': None, 'routing_key': 'cache', 'redelivered': True}, 'id': '0eba267c-72e4-40ea-91dd-a1a7ab17c514', 'correlation_id': '0eba267c-72e4-40ea-91dd-a1a7ab17c514', 'group': None, 'eta': None, 'kwargsrepr': "{'cache_projects': True, 'timeout': 15, 'user_id': UUID('d9c69ce0-f194-45a6-83cf-98f931fca8aa'), 'writes_only': False}", 'origin': 'gen3021<strong i="12">@worker02</strong>'}, '[[], {"cache_projects": true, "timeout": 15, "user_id": "d9c69ce0-f194-45a6-83cf-98f931fca8aa", "writes_only": false}, {"callbacks": null, "chain": null, "chord": null, "errbacks": null}]', 'application/json', 'utf-8') kwargs:{})
[2016-11-27 14:48:11,266: CRITICAL/MainProcess] Unrecoverable error: TypeError("'NoneType' object is not callable",)
Traceback (most recent call last):
  File "./venv/src/celery/celery/worker/worker.py", line 203, in start
    self.blueprint.start(self)
  File "./venv/src/celery/celery/bootsteps.py", line 119, in start
    step.start(parent)
  File "./venv/src/celery/celery/bootsteps.py", line 370, in start
    return self.obj.start()
  File "./venv/src/celery/celery/worker/consumer/consumer.py", line 318, in start
    blueprint.start(self)
  File "./venv/src/celery/celery/bootsteps.py", line 119, in start
    step.start(parent)
  File "./venv/src/celery/celery/worker/consumer/consumer.py", line 593, in start
    c.loop(*c.loop_args())
  File "./venv/src/celery/celery/worker/loops.py", line 47, in asynloop
    consumer.consume()
  File "./venv/lib/python3.4/site-packages/kombu/messaging.py", line 470, in consume
    self._basic_consume(T, no_ack=no_ack, nowait=False)
  File "./venv/lib/python3.4/site-packages/kombu/messaging.py", line 591, in _basic_consume
    no_ack=no_ack, nowait=nowait)
  File "./venv/lib/python3.4/site-packages/kombu/entity.py", line 737, in consume
    arguments=self.consumer_arguments)
  File "./venv/lib/python3.4/site-packages/amqp/channel.py", line 1578, in basic_consume
    wait=None if nowait else spec.Basic.ConsumeOk,
  File "./venv/lib/python3.4/site-packages/amqp/abstract_channel.py", line 73, in send_method
    return self.wait(wait, returns_tuple=returns_tuple)
  File "./venv/lib/python3.4/site-packages/amqp/abstract_channel.py", line 93, in wait
    self.connection.drain_events(timeout=timeout)
  File "./venv/lib/python3.4/site-packages/amqp/connection.py", line 464, in drain_events
    return self.blocking_read(timeout)
  File "./venv/lib/python3.4/site-packages/amqp/connection.py", line 469, in blocking_read
    return self.on_inbound_frame(frame)
  File "./venv/lib/python3.4/site-packages/amqp/method_framing.py", line 88, in on_frame
    callback(channel, msg.frame_method, msg.frame_args, msg)
  File "./venv/lib/python3.4/site-packages/amqp/connection.py", line 473, in on_inbound_method
    method_sig, payload, content,
  File "./venv/lib/python3.4/site-packages/amqp/abstract_channel.py", line 142, in dispatch_method
    listener(*args)
  File "./venv/lib/python3.4/site-packages/amqp/channel.py", line 1613, in _on_basic_deliver
    fun(msg)
  File "./venv/lib/python3.4/site-packages/kombu/messaging.py", line 617, in _receive_callback
    return on_m(message) if on_m else self.receive(decoded, message)
  File "./venv/src/celery/celery/worker/consumer/consumer.py", line 567, in on_task_received
    callbacks,
  File "./venv/src/celery/celery/worker/strategy.py", line 145, in task_message_handler
    handle(req)
  File "./venv/src/celery/celery/worker/worker.py", line 221, in _process_task_sem
    return self._quick_acquire(self._process_task, req)
  File "./venv/lib/python3.4/site-packages/kombu/async/semaphore.py", line 62, in acquire
    callback(*partial_args, **partial_kwargs)
  File "./venv/src/celery/celery/worker/worker.py", line 226, in _process_task
    req.execute_using_pool(self.pool)
  File "./venv/src/celery/celery/worker/request.py", line 532, in execute_using_pool
    correlation_id=task_id,
  File "./venv/src/celery/celery/concurrency/base.py", line 155, in apply_async
    **options)
  File "./venv/lib/python3.4/site-packages/billiard/pool.py", line 1487, in apply_async
    self._quick_put((TASK, (result._job, None, func, args, kwds)))
TypeError: 'NoneType' object is not callable
[2016-11-27 14:48:11,273: DEBUG/MainProcess] | Worker: Closing Hub...
[2016-11-27 14:48:11,274: DEBUG/MainProcess] | Worker: Closing Pool...
[2016-11-27 14:48:11,274: DEBUG/MainProcess] | Worker: Closing Consumer...
[2016-11-27 14:48:11,274: DEBUG/MainProcess] | Worker: Stopping Consumer...
[2016-11-27 14:48:11,274: DEBUG/MainProcess] | Consumer: Closing Connection...
[2016-11-27 14:48:11,275: DEBUG/MainProcess] | Consumer: Closing Events...
[2016-11-27 14:48:11,275: DEBUG/MainProcess] | Consumer: Closing Mingle...
[2016-11-27 14:48:11,275: DEBUG/MainProcess] | Consumer: Closing Tasks...
[2016-11-27 14:48:11,275: DEBUG/MainProcess] | Consumer: Closing Control...
[2016-11-27 14:48:11,275: DEBUG/MainProcess] | Consumer: Closing Gossip...
[2016-11-27 14:48:11,276: DEBUG/MainProcess] | Consumer: Closing Heart...
[2016-11-27 14:48:11,276: DEBUG/MainProcess] | Consumer: Closing event loop...
[2016-11-27 14:48:11,276: DEBUG/MainProcess] | Consumer: Stopping event loop...
[2016-11-27 14:48:11,276: DEBUG/MainProcess] | Consumer: Stopping Heart...
[2016-11-27 14:48:11,277: DEBUG/MainProcess] | Consumer: Stopping Gossip...
[2016-11-27 14:48:11,278: INFO/MainProcess] Received task: wakatime.tasks.cache_coding_activity[f786fc75-0518-4893-8988-ff7f063edd12]
[2016-11-27 14:48:11,278: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x7ff469300950> (args:('wakatime.tasks.cache_coding_activity', 'f786fc75-0518-4893-8988-ff7f063edd12', {'argsrepr': '()', 'task': 'wakatime.tasks.cache_coding_activity', 'lang': 'py', 'parent_id': '81f0c7ce-1396-496f-bf64-ae243736c845', 'timelimit': [None, None], 'root_id': '128647cc-f558-4b7d-bafc-338d186b5cfa', 'reply_to': 'e3c2b067-a058-3aa0-a3a1-384d4b917bbf', 'retries': 0, 'expires': None, 'delivery_info': {'exchange': '', 'priority': None, 'routing_key': 'cache', 'redelivered': True}, 'id': 'f786fc75-0518-4893-8988-ff7f063edd12', 'correlation_id': 'f786fc75-0518-4893-8988-ff7f063edd12', 'group': None, 'eta': None, 'kwargsrepr': "{'cache_projects': True, 'timeout': 15, 'user_id': UUID('7056644f-2564-4074-b89e-631973879f44'), 'writes_only': False}", 'origin': 'gen3021<strong i="13">@worker02</strong>'}, '[[], {"cache_projects": true, "timeout": 15, "user_id": "7056644f-2564-4074-b89e-631973879f44", "writes_only": false}, {"callbacks": null, "chain": null, "chord": null, "errbacks": null}]', 'application/json', 'utf-8') kwargs:{})
[2016-11-27 14:48:11,279: INFO/MainProcess] Received task: wakatime.tasks.cache_coding_activity[d5c8dc57-116c-467d-9924-e2999280c2f8]
[2016-11-27 14:48:11,280: INFO/MainProcess] Received task: wakatime.tasks.cache_coding_activity[460ef864-e482-4b0f-8580-d0095750bae6]
[2016-11-27 14:48:11,281: DEBUG/MainProcess] Closed channel #3
[2016-11-27 14:48:11,281: DEBUG/MainProcess] | Consumer: Stopping Control...
[2016-11-27 14:48:11,283: DEBUG/MainProcess] Closed channel #2
[2016-11-27 14:48:11,283: DEBUG/MainProcess] | Consumer: Stopping Tasks...
[2016-11-27 14:48:11,284: DEBUG/MainProcess] Canceling task consumer...
[2016-11-27 14:48:11,286: DEBUG/MainProcess] | Consumer: Stopping Mingle...
[2016-11-27 14:48:11,286: DEBUG/MainProcess] | Consumer: Stopping Events...
[2016-11-27 14:48:11,286: DEBUG/MainProcess] | Consumer: Stopping Connection...
[2016-11-27 14:48:11,286: DEBUG/MainProcess] | Worker: Stopping Pool...
[2016-11-27 14:48:12,800: DEBUG/MainProcess] result handler: all workers terminated
[2016-11-27 14:48:12,801: DEBUG/MainProcess] | Worker: Stopping Hub...
[2016-11-27 14:48:12,801: DEBUG/MainProcess] | Consumer: Shutdown Heart...
[2016-11-27 14:48:12,802: DEBUG/MainProcess] | Consumer: Shutdown Gossip...
[2016-11-27 14:48:12,802: DEBUG/MainProcess] | Consumer: Shutdown Control...
[2016-11-27 14:48:12,802: DEBUG/MainProcess] | Consumer: Shutdown Tasks...
[2016-11-27 14:48:12,803: DEBUG/MainProcess] Canceling task consumer...
[2016-11-27 14:48:12,803: DEBUG/MainProcess] Closing consumer channel...
[2016-11-27 14:48:12,803: DEBUG/MainProcess] | Consumer: Shutdown Events...
[2016-11-27 14:48:12,804: DEBUG/MainProcess] Closed channel #1
[2016-11-27 14:48:12,805: DEBUG/MainProcess] | Consumer: Shutdown Connection...
[2016-11-27 14:48:12,806: DEBUG/MainProcess] Closed channel #1
[2016-11-27 14:48:12,807: DEBUG/MainProcess] removing tasks from inqueue until task handler finished

تم تقديم هذا مع Celery 4.x لأن الرجوع إلى إصدار 3.1.24 يمنع التتبع.

لا يحدث لي هنا على Linux Python 3.4. ما الحجج التي تستخدمها لبدء العامل؟

يجب ألا يكون _quick_put مطلقًا بلا قيمة. هل يحدث هذا عند بدء التشغيل أم دائمًا بعد فشل الاتصال؟

لقد كنت أحاول التكاثر عن طريق إيقاف الوسيط أثناء تنفيذ المهام ، وما زلت لا أحالفني الحظ في التكاثر.

دائما عند بدء التشغيل. حجج العامل هي:

/opt/app/venv/bin/python /opt/app/venv/bin/celery worker --app=wakatime.celery --workdir=/opt/app --logfile=/var/log/celery/worker.log --loglevel=INFO --concurrency=50 --exclude-queues=medium,low,cache

👍 لهذا. الحصول على نفس المشكلة ، حتى على 4.0.1

ask يمكنني إعادة إنتاجها في كل مرة عندما يكون لديك رسائل على الوسيط تنتظر معالجتها عندما يأتي العامل. هذا هو الحال غالبًا عند استخدام الإيقاع ، وهذا هو حالتي. إذا كانت خدمات الإيقاع تأتي عبر الإنترنت قبل العامل ، فلن تتمكن من بدء العامل بسبب المشكلة المذكورة أعلاه. أنا أستخدم python 2.7 لكل هذه الأمور وأنا قادر على إعادة إنتاجها باستمرار.

هذا هو نفس الخطأ المذكور في # 3539

jmesquita يتوافق مع السيناريو الخاص بي ، نظرًا لأن قوائم الانتظار الخاصة بي تحتوي دائمًا على رسائل معلقة على الوسيط عند بدء العمال.

alanhamlett أحاول إصلاح هذا الأمر وقراءة الكود لكنني جديد على الكرفس لذا فقد يستغرق الأمر بعض الوقت. ما هو غريب بالنسبة لي هو أنه مع وجود الكثير من الأشخاص الذين يستخدمون رسائل الكرفس والكرفس في قائمة الانتظار افتراضيًا للعمال ، فإن هذا لم ينفجر داخل المجتمع. يجعلني أتساءل عما إذا كنت أسيء استخدامه بطريقة ما.

لقد بحثت في الكود قليلاً ، تم تعيين _quick_put بواسطة AsyncPool._create_write_handlers ، والذي يتم استدعاؤه بواسطة AsyncPool.register_with_event_loop ، والذي يتم استدعاؤه بواسطة celery.worker.loops.asynloop . ظاهريًا ، يبدو أن المشكلة هي أن asynloop يستدعي أولاً consumer.consume() وبعد ذلك فقط يستدعي obj.register_with_event_loop ، مما يتسبب في _quick_put ليكون None عندما يتم استدعاؤه من داخل consume() .

هذا من شأنه أن يفسر سبب عدم حدوث المشكلات عند عدم وجود رسائل في قائمة الانتظار عند بدء حلقة الحدث ، حيث أن consume() لن يفعل شيئًا وفي المرة التالية التي يتم الاتصال بها ، register_with_event_loop سوف تم استدعاؤه بالفعل.

يمكنني إصلاح هذا عن طريق التحرك

obj.controller.register_with_event_loop(hub)
obj.register_with_event_loop(hub)

قبل consumer.consume() ، على الرغم من أن هذا بالطبع ليس سوى إصلاح ساذج للغاية (وربما خاطئ).

لذلك عملت على حل مشكلتي بجعل رسائل ضربات الكرفس عابرة ، وهو في الواقع سلوكي المقصود على أي حال. سأعيد النظر في هذا بمجرد أن يكون لديّ خبرة أكبر مع الكرفس وقاعدة بياناته.

jmesquita :

لذلك عملت على حل مشكلتي بجعل رسائل ضربات الكرفس عابرة

هذا يمنع حدوث الخطأ. شكرا لك على الاقتراح.

لا يمكنني إعادة إنتاج هذا الخطأ إلا إذا كنت أحاول الاستهلاك من قوائم انتظار متعددة. إذا تم استهلاك كل شيء من قائمة انتظار واحدة ، فسيتم بدء التشغيل كما هو متوقع (يتم استهلاك الرسائل الموجودة في قائمة الانتظار بشكل صحيح).

adewes لقد اختبرت الحل المقترح وعلى الأقل ظاهريًا يبدو أنه يحل المشكلة.

adewes هل يمكنك إصدار طلب سحب حتى نتمكن من مناقشة التغيير المقترح؟

هل هناك أي تحديثات بشأن هذه المسألة؟ هذا يسبب لنا مشاكل كبيرة الآن ، بما في ذلك في الإنتاج. لا يمكنني حتى الاختبار محليًا لأنني حصلت على مشكلة TypeError . قد نضطر إلى الرجوع إلى إصدار الكرفس 3.

لم أتمكن من حلها حتى الآن ، كما تم الرجوع إلى الإصدار 3 في الوقت الحالي ، آمل أن يتم حل المشكلة قريبًا. thedrow لم يسفر "الإصلاح السريع" الخاص بي عن حل كامل للمشكلة ، لذا فأنا لا أفتح طلب سحب. لست على دراية كاملة بتدفق البيانات للمكونات المستخدمة (هناك العديد من المكتبات قيد التشغيل هنا) ، لذلك لا يمكنني تصحيح هذا الأمر الآن لسوء الحظ.

لست متأكدًا في الواقع من أنه يمكننا الرجوع إلى إصدار أقدم لأنه من الممكن أن نعتمد على الاستخدام الجديد لرؤوس الرسائل في تصميم المهمة الإصدار 2.

@ اسأل - يسعدني مشاركة الشاشة أو أي شيء معك حتى تتمكن من رؤية بيئتي الدقيقة للمساعدة في تصحيح الأخطاء ، وربما حتى محاولة فتح تصحيح الأخطاء عن بُعد إذا احتجنا إلى ذلك. نحن في مأزق بعض الشيء لأننا دخلنا جميعًا في Celery 4 ولا يمكننا الآن بدء عمالنا في الإنتاج.

في الوقت الحالي ، يمكنك تثبيت مفترقتي لتشغيل الأشياء في بيئة إنتاجك:

pip install -e git://github.com/alanhamlett/celery.git@73147a9da31f2932eb4778e9474fbe72f23d21c2#egg=Celery

لقد فتحت للتو # 3752 لإصلاح ذلك ، لكنني بحاجة إلى اكتشاف اختبار جيد لتغطية الخطأ أولاً.

شكرا جزيلا.

بدأت أفكر في أنني مجنون ... حاولت الترقية إلى 4.0.2 (حاليًا 4.0.0) ومع هذه الترقية ، توقفت كل المفاجأة self.retry() عن العمل أيضًا.

يبدو تحديد قوائم الانتظار بشكل صريح من CLI وكأنه جولة (على 4.0.0)

نحن نحدد قوائم الانتظار بشكل صريح في CLI ؛ ما زلنا نواجه المشكلة.

يوم الجمعة 13 كانون الثاني (يناير) 2017 الساعة 5:35 صباحًا ، Karol Duleba [email protected]
كتب:

يبدو تحديد قوائم الانتظار بشكل صريح من CLI وكأنه جولة (على
4.0.0)

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/celery/celery/issues/3620#issuecomment-272412258 ، أو كتم الصوت
الخيط
https://github.com/notifications/unsubscribe-auth/ABRHQSzvyRcQI5qvfufNwPJvXNElcQKPks5rR1NggaJpZM4K7LEz
.

jdotjdot - أرى نفس الشيء. تحديد قوائم الانتظار في سطر الأوامر.
أرى المشكلة فقط عندما تكون هناك بيانات في قائمة الانتظار. إذا كانت قوائم الانتظار فارغة ، فيمكنني بدء تشغيل العمال.

+1

وجود هذه المشكلة بالضبط. يبدو أن الحل الوحيد هو إعادة تعيين الوسيط الخاص بي (وهذا ليس جيدًا لقائمة انتظار).

+1

بعد ذلك ، # 3773 ، الافتقار إلى الميزات الأساسية ، والتعقيد المفرط ، من المحتمل أن أستبدل الكرفس بـ https://github.com/closeio/tasktiger. هل يريد أي شخص أن يتولى # 3752؟ كل ما تحتاجه هو كتابة اختبار لتغطية المشكلة.

alanhamlett لم أكن على علم بـ Tasktiger ، لكنها تبدو واعدة. هل تعرف مدى نضجها / استقرارها / موثوقيتها؟ عادة ما أكون من أشد المعجبين بالأطر الصغيرة ، والآن نمت الكرفس بشكل ضخم ، مع العديد من التبعيات الخارجية + التحول إلى Python3 ... يبدو أن الأمور تخرج عن نطاق السيطرة (على الأقل في عمليات النشر الخاصة بي).

بالنظر إلى وجود إصلاح في PR # 3752 ، ما هي الخطط لإصدار هذا بالفعل؟ يرجى ملاحظة أن هذا خطأ فادح لأنه يمنع أي بيئة إنتاج من استخدام الكرفس 4.x. لا يمكن أن يموت العمال فقط لأن هناك رسائل معلقة قادمة.

هل ترغب في رؤية هذا مدمجًا أيضًا

مع الطبيعة المؤقتة للعمال كونها أساسية جدًا للكرفس ، لا أستطيع أن أتخيل أن هناك العديد من القضايا الأخرى التي تستحق أولوية أعلى من هذه المشكلة. هذا هو الشيء الوحيد الذي يمنعنا من الذهاب إلى Prod. هل لدى أي شخص تقدير حول موعد معالجتها؟

johnatron اعتقدت نفس الشيء ، لكن واجهت العديد من الأخطاء الأخرى التي تم إدخالها حديثًا في Prod. اضطررت إلى الرجوع إلى إصدار أقدم ، وهو أمر صعب لأن مواصفات المراسلة غير متوافقة بين 3.x و 4.x. كما جعلني أنظر إلى بدائل للكرفس ، مثل Tasktiger . كن حذرًا مع الكرفس 4.xx في المنتج.

مواصفات الرسالة متوافقة مع أحدث إصدار من 3.x.

سوف أعترف أنني مندهش جدًا من عدم معالجة هذا الأمر. أنا استخدم
شوكة آلان قيد الإنتاج الآن.

يوم الإثنين 13 فبراير 2017 الساعة 2:05 مساءً ، Alan Hamlett [email protected]
كتب:

johnatron https://github.com/johnatron اعتقدت نفس الشيء ولكن
واجه العديد من الأخطاء الأخرى التي تم إدخالها حديثًا في Prod. اضطررت إلى الرجوع إلى إصدار سابق ،
وهو أمر صعب لأن مواصفات المراسلة غير متوافقة بين 3.x
و 4.x. كما جعلني أنظر إلى بدائل للكرفس ، مثل Tasktiger
https://github.com/closeio/tasktiger . كن حذرًا مع الكرفس 4.xx بوصة
همز.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/celery/celery/issues/3620#issuecomment-279489134 ، أو كتم الصوت
الخيط
https://github.com/notifications/unsubscribe-auth/ABRHQZkHixjDu37IA7PbAW6iJYcVTGevks5rcKligaJpZM4K7LEz
.

في ضوء هذا التأخير المؤسف ، قررت دمج بعض الإصلاحات لمشكلات Celery 4 المعروفة معًا في git+http://github.com/Eugeny/celery#egg=celery==4.0.2.1
هذا يشمل:

  • إصلاح alanhamlett لهذه المشكلة
  • إصلاح HealthTechDevelopers لجدول django-celery-beat لا تتم إعادة تحميله

تعمل بشكل جيد في الإنتاج حتى الآن

قد تكون مواصفات الرسالة متوافقة ، ولكن هناك اختلافات (دقيقة) غير متوافقة بين الإصدارات عندما يتعلق الأمر بـ Celery Canvas والتسلسل (وهي ميزة نستخدمها كثيرًا). تم بذل قدر كبير من الجهد لنقل تطبيقنا من الإصدار 3 إلى الإصدار 4. الاضطرار إلى العودة سيكون وقتًا سيئًا.

يا يوم فرابجوس! شكرا لك.

لدي نفس المشكلة باستخدام Python 3.6 و الكرفس 4.0.2.

أغلق الكرفس وأنشئ مهمة وابدأ تشغيل الكرفس واحصل على الخطأ على الفور TypeError: 'NoneType' object is not callable . ask ، هل يمكنك النظر في الإصلاحات والدمج المقترحة؟ هذا يمنع مستخدمي الكرفس السعداء سابقًا من الاستمرار في استخدام الكرفس :(

شكرًا لك على وقتك ،ask!

"لم يعد Microsoft Windows مدعومًا.

تم اجتياز مجموعة الاختبار ، ويبدو أن Celery يعمل مع Windows ، لكننا لا نقدم أي ضمانات لأننا غير قادرين على تشخيص المشكلات على هذا النظام الأساسي. إذا كنت شركة تحتاج إلى دعم على هذه المنصة ، فيرجى الاتصال بنا ".
ربما لن تكون ثابتة.

tiptoettt هذه ليست مشكلة خاصة بـ Windows. أنا على Mac. هل يمكنك إلقاء نظرة فاحصة على تعليقات الجميع؟ سيتخلص المطورون من الكرفس بسبب هذا. لقد استخدمت الكرفس لمدة 5 سنوات وهي مشكلة كبيرة. سأستخدم إصدارًا سابقًا 3.1.25 إذا لم يكن لديه هذه المشكلة.

أيضا وجود هذه المشكلة

lpiner<strong i="6">@host</strong>:~$ uname -a
Linux host 4.4.0-72-generic #93-Ubuntu SMP Fri Mar 31 14:07:41 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
lpiner<strong i="9">@host</strong>:~$ celery --version
4.0.2 (latentcall)

هذا هو سطر التعليمات البرمجية الذي يبدو أنه يسبب المشكلة:

task_queues = (
    Queue('queue1_name', Exchange('default'), routing_key='default'),
    Queue('queue2_name', Exchange('default'), routing_key='general.routing_key'),
)

تؤدي إزالة قائمة الانتظار الثانية إلى اختفاء المشكلة.

من خلال ما أفهمه من مشاركة ChillarAnand في الكرفس / kombu / Issues / 675 ، يجب حل هذه المشكلة بواسطة 4.0.3 ، أليس كذلك؟

لم أر هذه المشكلة منذ أن بدأت البناء من الفرع الرئيسي.

في 8 مايو 2017 الساعة 5:58 مساءً ، كتب "فيكتور" [email protected] :

مما فهمته منChillarAnand
https://github.com/ChillarAnand 's post in celery / kombu # 675
https://github.com/celery/kombu/issues/675 ، يجب حل هذه المشكلة
بواسطة 4.0.3 ، أليس كذلك؟

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/celery/celery/issues/3620#issuecomment-300002736 ، أو كتم الصوت
الخيط
https://github.com/notifications/unsubscribe-auth/AC3sA400hzoX7V0GUrUSfYmry9SZ8eIRks5r34_pgaJpZM4K7LEz
.

شكرا ، لقد نجحت!

واجهت نفس المشكلة في Celery 3.1.23 (Cipater) باستخدام RabbitMQ. بعد تصحيح طويل ، وجدت أخيرًا هذا الموضوع وقمت بإصلاح المشكلة باستخدام إصدار 3.1.25. لكنه كان يضرب رأسه بالحائط ، حقًا.

نفس المشكلة على v4.0.2 (latentcall) مع قوائم انتظار متعددة + نبضات قلب.

نفس المشكلة بالنسبة لي على v0.4.0.2 الحل البديل هو الرجوع إلى v3.x

الإصدار 4.0.2
بالنسبة لي هذا الموضوع هو عرض. لا أعتبر الرجوع إلى 3.x. آمل أن يتم إطلاق الإصدار الجديد قريبًا.

@ ba1dr بناء من سيد. هذا يصلح لي

LPiner ، شكرًا ، لقد حل هذا المشكلة بالنسبة لي. لكن هذا ليس حلاً جاهزًا للإنتاج ، إيه؟

@ ba1dr ليس كثيرًا من خيار TBH. إما هذا أو الرجوع إلى الإصدار 3.x.
نستخدمها في الإنتاج بدون مشاكل ولكن نطاقنا لا يتجاوز بضع مئات من الوظائف في اليوم ، وقد يختلف عدد الأميال التي قطعتها.

سوف نطلق سراحنا قريبا. انظر # 4109

تتأثر هنا أيضًا. فقط اضربنا. جاهز للنشر!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات