Celery: TypeError๊ฐ€ ์žˆ๋Š” ์ฒซ ๋ฒˆ์งธ ์ž‘์—… ํ›„ Celery Worker ์ถฉ๋Œ: 'NoneType' ๊ฐœ์ฒด๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์Œ

์— ๋งŒ๋“  2016๋…„ 11์›” 24์ผ  ยท  54์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: celery/celery

์ฒดํฌ๋ฆฌ์ŠคํŠธ

  • [X] ๋ฌธ์ œ์— celery -A proj report ์˜ ์ถœ๋ ฅ์„ ํฌํ•จํ–ˆ์Šต๋‹ˆ๋‹ค.
    (์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์ตœ์†Œํ•œ Celery
    ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๋ฒ„์ „).
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] Celery์˜ master ๋ถ„๊ธฐ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
    ์˜ˆ, ํ…Œ์ŠคํŠธํ–ˆ์œผ๋ฉฐ ๋งˆ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์žฌํ˜„ ๋‹จ๊ณ„

๋™์ผํ•œ ์‚ฌ์–‘๊ณผ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๊ฐ€์ง„ ๋‹ค๋ฅธ ๊ธฐ๊ณ„๊ฐ€ ์ž‘๋™ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ •ํ™•ํžˆ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ์ƒ๋˜๋Š” ํ–‰๋™

์ž‘์—…์„ ์†Œ๋น„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ํ–‰๋™

์ž‘์—…์ด ์ˆ˜๋ฝ๋˜๊ณ  ์—ญ์ถ”์ (traceback)์ด ๊ธฐ๋ก๋œ ๋‹ค์Œ ์ž‘์—…์ž๋Š” ์–ด๋–ค ์ด์œ ๋กœ ๋ธŒ๋กœ์ปค์— ๋‹ค์‹œ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์˜์›ํžˆ ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค.

[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 ๋Œ“๊ธ€

Celery ์ž‘์—…์ž ๋ฐ๋ชฌ์ด ์ถฉ๋Œํ•˜๋ฏ€๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋กœ๊ทธ์—์„œ ๋ฐ˜๋ณต๋˜๋ฏ€๋กœ systemd๊ฐ€ ์ด๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

@ask , self._quick_put ์ด(๊ฐ€) ์ •์˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‹น๊ตฌ๋Š” ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— None ๊ฐ’์„ ํ™•์ธํ•˜๊ณ  ์˜ˆ์™ธ๋ฅผ ํฌ์ฐฉํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด self._quick_put ๊ฐ€ None ๊ฐ€ ์•„๋‹ˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

billiard/pool.py#L1483 ์„ if self.threads or self._quick_put is None: ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด Celery๊ฐ€ ๋” ์ด์ƒ ์ถฉ๋Œํ•˜์ง€ ์•Š์ง€๋งŒ ์–ด๋–ค ์ด์œ ๋กœ ์ž‘์—…์ž๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋กœ๊น… ์ˆ˜์ค€ 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

์ด๊ฒƒ์€ 3.1.24 ๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด ์—ญ์ถ”์ ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Celery 4.x์—์„œ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ Linux Python 3.4์—์„œ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž‘์—…์ž๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์ธ์ˆ˜๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

_quick_put์€ None btw๊ฐ€ ๋˜์–ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‹œ์ž‘ ์‹œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ํ•ญ์ƒ ์—ฐ๊ฒฐ ์‹คํŒจ ํ›„์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ?

์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ ๋ธŒ๋กœ์ปค๋ฅผ ์ค‘์ง€ํ•˜์—ฌ ์žฌ์ƒ์‚ฐ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์žฌ์ƒ์‚ฐ์— ์šด์ด ์—†์Šต๋‹ˆ๋‹ค.

ํ•ญ์ƒ ์‹œ์ž‘ํ•  ๋•Œ. ์ž‘์—…์ž ์ธ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

/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() ์ด์ „์— , ๋ฌผ๋ก  ์ด๊ฒƒ์€ ๋งค์šฐ ์ˆœ์ง„ํ•œ(๊ทธ๋ฆฌ๊ณ  ์•„๋งˆ๋„ ์ž˜๋ชป๋œ) ์ˆ˜์ •์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์…€๋Ÿฌ๋ฆฌ ๋น„ํŠธ ๋ฉ”์‹œ์ง€๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ๋งŒ๋“ค์–ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์–ด์จŒ๋“  ์‹ค์ œ๋กœ ์˜๋„ํ•œ ๋™์ž‘์ž…๋‹ˆ๋‹ค. Celery์™€ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ์กฐ๊ธˆ ๋” ์Œ“์ด๋ฉด ์ด๋ฅผ ๋‹ค์‹œ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

@jmesquita :

๊ทธ๋ž˜์„œ ์…€๋Ÿฌ๋ฆฌ ๋น„ํŠธ ๋ฉ”์‹œ์ง€๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ œ์•ˆํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ๋Œ€๊ธฐ์—ด์—์„œ ์†Œ๋น„ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ด ๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ๋Œ€๊ธฐ์—ด์—์„œ ๋ชจ๋“  ๊ฒƒ์ด ์‚ฌ์šฉ๋˜๋ฉด ์‹œ์ž‘์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(๋Œ€๊ธฐ์—ด์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์ œ๋Œ€๋กœ ์‚ฌ์šฉ๋จ).

@adewes ์ œ์•ˆํ•œ ์†”๋ฃจ์…˜์„ ํ…Œ์ŠคํŠธํ–ˆ์œผ๋ฉฐ ์ ์–ด๋„ ํ‘œ๋ฉด์ ์œผ๋กœ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

@adewes ์ œ์•ˆ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ๋ฐœํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ํ˜„์žฌ ์ƒ์‚ฐ์„ ํฌํ•จํ•˜์—ฌ ์šฐ๋ฆฌ์—๊ฒŒ ํฐ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. TypeError ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋กœ์ปฌ์—์„œ ํ…Œ์ŠคํŠธํ•  ์ˆ˜๋„ ์—†์Šต๋‹ˆ๋‹ค. Celery 3๋กœ ๋‹ค์‹œ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ง€๊ธˆ๊นŒ์ง€ ๊ทธ๊ฒƒ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์—ˆ๊ณ  ์ง€๊ธˆ์€ ๋ฒ„์ „ 3์œผ๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ๊ณง ์ˆ˜์ •๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. @thedrow ๋‚ด "๋น ๋ฅธ ์ˆ˜์ •"์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ์™„์ „ํžˆ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์„ ์—ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‚ฌ์šฉ๋œ ๊ตฌ์„ฑ ์š”์†Œ์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์— ์™„์ „ํžˆ ์ •ํ†ตํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ(์—ฌ๊ธฐ์—๋Š” ์—ฌ๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์Œ) ๋ถˆํ–‰ํžˆ๋„ ์ง€๊ธˆ ๋‹น์žฅ ๋” ์ด์ƒ ๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

v2 ์ž‘์—… ๋””์ž์ธ์—์„œ ์ƒˆ๋กœ์šด ๋ฉ”์‹œ์ง€ ํ—ค๋” ์‚ฌ์šฉ์— ์˜์กดํ•˜๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜ ์žˆ๋Š”์ง€์กฐ์ฐจ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@ask--๋””๋ฒ„๊ทธ์— ๋„์›€์ด ๋˜๋Š” ์ •ํ™•ํ•œ ํ™˜๊ฒฝ์„ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ™”๋ฉด ๊ณต์œ  ๋˜๋Š” ๋ฌด์—‡์ด๋“  ํ•จ๊ป˜ ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์›๊ฒฉ ๋””๋ฒ„๊ทธ๋ฅผ ์—ด์–ด๋ณผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. 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์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ๋Œ€๊ธฐ์—ด์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

2017๋…„ 1์›” 13์ผ ๊ธˆ์š”์ผ ์˜ค์ „ 5์‹œ 35๋ถ„, Karol Duleba [email protected]
์ผ๋‹ค:

CLI์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ๋Œ€๊ธฐ์—ด์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์€ ๋‘˜๋Ÿฌ๋ณด๊ธฐ(on
4.0.0)

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/celery/celery/issues/3620#issuecomment-272412258 ๋˜๋Š” ์Œ์†Œ๊ฑฐ
์Šค๋ ˆ๋“œ
https://github.com/notifications/unsubscribe-auth/ABRHQSzvyRcQI5qvfufNwPJvXNElcQKPks5rR1NggaJpZM4K7LEz
.

@jdotjdot - ๊ฐ™์€ ๊ฒƒ์„ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช…๋ น์ค„์—์„œ ๋Œ€๊ธฐ์—ด ์ง€์ •.
๋Œ€๊ธฐ์—ด์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋ฌธ์ œ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋Œ€๊ธฐ์—ด์ด ๋น„์–ด ์žˆ์œผ๋ฉด ์ž‘์—…์ž๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

+1

์ด ์ •ํ™•ํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์ผํ•œ ํ•ด๊ฒฐ์ฑ…์€ ๋‚ด ๋ธŒ๋กœ์ปค๋ฅผ ์žฌ์„ค์ •ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(๋Œ€๊ธฐ์—ด์— ์ข‹์ง€ ์•Š์Œ).

+1

์ดํ›„ #3773, ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์˜ ๋ถ€์กฑ, ๊ณผ๋„ํ•œ ๋ณต์žก์„ฑ ๋‚˜๋Š” ์•„๋งˆ๋„ Celery๋ฅผ https://github.com/closeio/tasktiger๋กœ ๋Œ€์ฒดํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. #3752๋ฅผ ์ธ์ˆ˜ํ•˜๋ ค๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃจ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

@alanhamlett tasktiger ์— ๋Œ€ํ•ด ์•Œ์ง€ ๋ชปํ–ˆ์ง€๋งŒ ์œ ๋งํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ์–ผ๋งˆ๋‚˜ ์„ฑ์ˆ™/์•ˆ์ •/์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•„์‹ญ๋‹ˆ๊นŒ? ์ €๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋งˆ์ดํฌ๋กœ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์—ด๋ ฌํ•œ ํŒฌ์ด๋ฉฐ ์ด์ œ Celery๋Š” ์—ฌ๋Ÿฌ ์™ธ๋ถ€ ์ข…์†์„ฑ + Python3์œผ๋กœ์˜ ์ „ํ™˜ ๋“ฑ์œผ๋กœ ๊ฑฐ๋Œ€ํ•˜๊ฒŒ ์„ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ํ†ต์ œ ๋ถˆ๋Šฅ ์ƒํƒœ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(์ ์–ด๋„ ๋‚ด ๋ฐฐํฌ์—์„œ๋Š”).

์ด๋ฏธ PR #3752์— ์ˆ˜์ • ์‚ฌํ•ญ์ด ์žˆ๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜๋ฉด ์ด๋ฅผ ๋ฆด๋ฆฌ์Šคํ•  ๊ณ„ํš์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ๋ชจ๋“  ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ Celery 4.x๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์š”ํ•œ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค. ๋Œ€๊ธฐ ์ค‘์ธ ๋ฉ”์‹œ์ง€๊ฐ€ ๋“ค์–ด์™”๋‹ค๊ณ  ํ•ด์„œ ์ž‘์—…์ž๋ฅผ ์ฃฝ๊ฒŒ ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ๋„ ํ•ฉ์ฒด๋œ๊ฑฐ ๋ณด๊ณ ์‹ถ๋‹ค

์ž‘์—…์ž์˜ ์ผ์‹œ์ ์ธ ํŠน์„ฑ์ด Celery์— ๋งค์šฐ ๊ธฐ๋ณธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ๋ณด๋‹ค ๋” ๋†’์€ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ฐ€์งˆ ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ๋‹ค๊ณ  ์ƒ์ƒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ Prod๋กœ ๊ฐ€๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ์œ ์ผํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ธ์ œ ํ•ด๊ฒฐ๋ ์ง€ ์˜ˆ์ƒํ•˜๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@johnatron ์ €๋„ ๊ฐ™์€ ์ƒ๊ฐ์„ ํ–ˆ์ง€๋งŒ Prod์—์„œ ์ƒˆ๋กœ ๋„์ž…๋œ ์—ฌ๋Ÿฌ ๋ฒ„๊ทธ์— ๋ถ€๋”ช์ณค์Šต๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง• ์‚ฌ์–‘์ด 3.x์™€ 4.x ๊ฐ„์— ํ˜ธํ™˜๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ tasktiger ์™€ ๊ฐ™์€ Celery์˜ ๋Œ€์•ˆ์„ ์‚ดํŽด๋ณด๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. Prod์—์„œ Celery 4.xx์— ์ฃผ์˜ํ•˜์‹ญ์‹œ์˜ค.

๋ฉ”์‹œ์ง€ ์‚ฌ์–‘์€ ์ตœ์‹  ๋ฒ„์ „์˜ 3.x์™€ ์ƒํ˜ธ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ์‚ฌ์‹ค์— ์ƒ๋‹นํžˆ ๋†€๋ž์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋‹ค
Alan์˜ ํฌํฌ๋Š” ํ˜„์žฌ ์ƒ์‚ฐ ์ค‘์ž…๋‹ˆ๋‹ค.

2017๋…„ 2์›” 13์ผ ์›”์š”์ผ ์˜คํ›„ 2์‹œ 5๋ถ„, Alan Hamlett [email protected]
์ผ๋‹ค:

@johnatron https://github.com/johnatron ์ €๋„ ๊ฐ™์€ ์ƒ๊ฐ์ด์—ˆ์ง€๋งŒ
Prod์—์„œ ์ƒˆ๋กœ ๋„์ž…๋œ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ๋ฒ„๊ทธ์— ๋ถ€๋”ช์ณค์Šต๋‹ˆ๋‹ค. ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋ฅผ ํ•ด์•ผ ํ–ˆ๊ณ ,
๋ฉ”์‹œ์ง• ์‚ฌ์–‘์ด 3.x ๊ฐ„์— ํ˜ธํ™˜๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
๋ฐ 4.x. ๋˜ํ•œ tasktiger์™€ ๊ฐ™์€ Celery์˜ ๋Œ€์•ˆ์„ ์‚ดํŽด๋ณด๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/closeio/tasktiger . Celery 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์™€ ์—ฐ๊ฒฐ(์šฐ๋ฆฌ๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ)๊ณผ ๊ด€๋ จํ•˜์—ฌ ๋ฒ„์ „ ๊ฐ„์— (๋ฏธ๋ฌ˜ํ•˜๊ฒŒ) ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ์•ฑ์„ v3์—์„œ v4๋กœ ์ด์‹ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ๋‹นํ•œ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์˜€์Šต๋‹ˆ๋‹ค. ๋Œ์•„๊ฐ€์•ผ ํ•˜๋Š” ๊ฒƒ์€ ๋‚˜์œ ์‹œ๊ฐ„์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ค ๋ฉ‹์ง„ ํ•˜๋ฃจ! ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

Python 3.6 ๋ฐ celery 4.0.2๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์…€๋Ÿฌ๋ฆฌ๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  ์ž‘์—…์„ ๋งŒ๋“ค๊ณ  ์…€๋Ÿฌ๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด ์ฆ‰์‹œ TypeError: 'NoneType' object is not callable ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. @ask ์ œ์•ˆ๋œ ์ˆ˜์ • ์‚ฌํ•ญ ๋ฐ ๋ณ‘ํ•ฉ์„ ๊ณ ๋ คํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ Celery์˜ ์ด์ „์— ๋งŒ์กฑํ–ˆ๋˜ ์‚ฌ์šฉ์ž๊ฐ€ Celery๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ๋‚ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, @sk!

"Microsoft Windows๋Š” ๋” ์ด์ƒ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ์ œํ’ˆ๊ตฐ์ด ํ†ต๊ณผ๋˜๊ณ  Celery๊ฐ€ Windows์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด์ง€๋งŒ ์ด ํ”Œ๋žซํผ์—์„œ ๋ฌธ์ œ๋ฅผ ์ง„๋‹จํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์ง€์›์ด ํ•„์š”ํ•œ ๊ธฐ์—…์ด๋ผ๋ฉด ์—ฐ๋ฝ์ฃผ์„ธ์š”."
์•„๋งˆ ๊ณ ์ณ์ง€์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@tiptoettt ์ด๊ฒƒ์€ Windows์—๋งŒ ๊ตญํ•œ๋œ ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ €๋Š” ๋งฅ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋“ค ๋Œ“๊ธ€ ์ž์„ธํžˆ ๋ด์ฃผ์‹ค ์ˆ˜ ์žˆ๋‚˜์š”? ๊ฐœ๋ฐœ์ž๋“ค์€ ์ด๊ฒƒ ๋•Œ๋ฌธ์— Celery๋ฅผ ๋ฒ„๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” 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'),
)

๋‘ ๋ฒˆ์งธ ๋Œ€๊ธฐ์—ด์„ ์ œ๊ฑฐํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

celery/kombu/issues/675์— ์žˆ๋Š” @ChillarAnand ์˜ ๊ฒŒ์‹œ๋ฌผ์—์„œ ๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด ์ด ๋ฌธ์ œ๋Š” 4.0.3์—์„œ ํ•ด๊ฒฐ๋˜์–ด์•ผ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์—์„œ ๋นŒ๋“œ๋ฅผ ์‹œ์ž‘ํ•œ ์ดํ›„๋กœ ์ด ๋ฌธ์ œ๋ฅผ ๋ณธ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค.

2017๋…„ 5์›” 8์ผ ์˜คํ›„ 5์‹œ 58๋ถ„์— "Victor" [email protected] ์ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

@ChillarAnand์—์„œ ๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด
https://github.com/ChillarAnand ์˜ 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
.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค!

RabbitMQ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Celery 3.1.23(Cipater)์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋žœ ๋””๋ฒ„๊น… ๋์— ๋งˆ์นจ๋‚ด ์ด ์Šค๋ ˆ๋“œ๋ฅผ ์ฐพ์•˜๊ณ  3.1.25 ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ์ •๋ง๋กœ, ๋ฒฝ์— ๋จธ๋ฆฌ๋ฅผ ๋‘๋“œ๋ฆฌ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

์—ฌ๋Ÿฌ ๋Œ€๊ธฐ์—ด + ํ•˜ํŠธ๋น„ํŠธ๊ฐ€ ์žˆ๋Š” v4.0.2 (latentcall) ์— ๋Œ€ํ•œ ๋™์ผํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

v0.4.0.2 ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ v3.x ๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋ฉ๋‹ˆ๋‹ค.

v4.0.2
์ €์—๊ฒŒ ์ด ๋ฌธ์ œ๋Š” ์‡ผ์Šคํ† ํผ์ž…๋‹ˆ๋‹ค. 3.x๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์€ ๊ณ ๋ คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ฒ„์ „์ด ๊ณง ์ถœ์‹œ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@ba1dr ๋งˆ์Šคํ„ฐ์—์„œ ๋นŒ๋“œ. ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ๊ณ ์นœ๋‹ค.

@LPiner , ๋•๋ถ„์— ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์ƒ์‚ฐ ์ค€๋น„๊ฐ€ ๋œ ์†”๋ฃจ์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค. ์‘?

@ba1dr ์„ ํƒ์˜ ์—ฌ์ง€๊ฐ€ ๋งŽ์ง€ ์•Š์€ TBH. ์ด๊ฒƒ์ด ์•„๋‹ˆ๋ฉด 3.x๋กœ ๋‹ค์‹œ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•˜์‹ญ์‹œ์˜ค.
ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฌธ์ œ ์—†์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ ๊ทœ๋ชจ๋Š” ํ•˜๋ฃจ์— ์ˆ˜๋ฐฑ ๊ฐœ์— ๋ถˆ๊ณผํ•˜๋ฏ€๋กœ ๋งˆ์ผ๋ฆฌ์ง€๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณง ์ถœ์‹œ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. #4109 ์ฐธ์กฐ

์—ฌ๊ธฐ์—์„œ๋„ ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ์šฐ๋ฆฌ๋ฅผ ๋•Œ๋ ค. ์ถœ์‹œ ์ค€๋น„ ์™„๋ฃŒ!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰