0

ドキュメントに従ってセロリの使用を開始しようとしていますが、サンプル コードでデバッグが困難な問題が発生しています。同じ問題の両面に直面しているのか、それとも 2 つの固有の問題に直面しているのか、私にはわかりません。シェル経由で SQS キューに接続できますが、django では接続できません。その動作と、Celery のインポートとタスクのインポートの問題との関係がどのようなものかわかりません。

ここの「はじめに」ガイド: http://celery.github.com/celery/getting-started/first-steps-with-celery.html#running-the-celery-worker-server

コードを示します

from celery import Celery

このコードは、Python シェルから実行すると機能しますが、Eclipse の tasks.py の django プロジェクト内で実行すると、エラー Unresolved Import: Celery が発生します。

ここに別のガイドがあります: http://celery.github.com/celery/django/first-steps-with-django.html django の場合、代わりに使用します

from celery import task

ただし、チュートリアルを続行して呼び出すと、問題は解決します

add.delay(2, 2)

接続エラーが発生しましたが、django プロジェクトのセットアップで使用する SQS の代わりに rabbitmq を引き続き使用しようとしているようです (これは機能し、Amazon の Web インターフェイスから SQS キューを確認できます。 from celery import Celery を使用してシェルからすべてを行う場合の接続)。関連する場合のスタック トレースは次のとおりです。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/celery/app/task.py", line 343, in delay
    return self.apply_async(args, kwargs)
  File "/usr/local/lib/python2.7/dist-packages/celery/app/task.py", line 458, in apply_async
    with app.producer_or_acquire(producer) as P:
  File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__
    return self.gen.next()
  File "/usr/local/lib/python2.7/dist-packages/celery/app/base.py", line 247, in producer_or_acquire
    with self.amqp.producer_pool.acquire(block=True) as producer:
  File "/usr/local/lib/python2.7/dist-packages/kombu/connection.py", line 705, in acquire
    R = self.prepare(R)
  File "/usr/local/lib/python2.7/dist-packages/kombu/pools.py", line 54, in prepare
    p = p()
  File "/usr/local/lib/python2.7/dist-packages/kombu/pools.py", line 45, in <lambda>
    return lambda: self.create_producer()
  File "/usr/local/lib/python2.7/dist-packages/kombu/pools.py", line 42, in create_producer
    return self.Producer(self._acquire_connection())
  File "/usr/local/lib/python2.7/dist-packages/celery/app/amqp.py", line 160, in __init__
    super(TaskProducer, self).__init__(channel, exchange, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/kombu/messaging.py", line 83, in __init__
    self.revive(self.channel)
  File "/usr/local/lib/python2.7/dist-packages/kombu/messaging.py", line 174, in revive
    channel = self.channel = maybe_channel(channel)
  File "/usr/local/lib/python2.7/dist-packages/kombu/connection.py", line 879, in maybe_channel
    return channel.default_channel
  File "/usr/local/lib/python2.7/dist-packages/kombu/connection.py", line 617, in default_channel
    self.connection
  File "/usr/local/lib/python2.7/dist-packages/kombu/connection.py", line 610, in connection
    self._connection = self._establish_connection()
  File "/usr/local/lib/python2.7/dist-packages/kombu/connection.py", line 569, in _establish_connection
    conn = self.transport.establish_connection()
  File "/usr/local/lib/python2.7/dist-packages/kombu/transport/amqplib.py", line 279, in establish_connection
    connect_timeout=conninfo.connect_timeout)
  File "/usr/local/lib/python2.7/dist-packages/kombu/transport/amqplib.py", line 90, in __init__
    super(Connection, self).__init__(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/amqplib/client_0_8/connection.py", line 129, in __init__
    self.transport = create_transport(host, connect_timeout, ssl)
  File "/usr/local/lib/python2.7/dist-packages/amqplib/client_0_8/transport.py", line 281, in create_transport
    return TCPTransport(host, connect_timeout)
  File "/usr/local/lib/python2.7/dist-packages/amqplib/client_0_8/transport.py", line 85, in __init__
    raise socket.error, msg
socket.error: [Errno 111] Connection refused

settings.py では、BROKER_URL が SQS URL で正しく構成されています (また、シークレット コードにフォワード スラッシュがなく、これは明らかに過去の問題でした)。

そう

  1. 「セロリからセロリをインポート」がPythonシェルから機能するのに、djangoプロジェクトのEclipseでは機能しないのはなぜですか?
  2. django チュートリアルの指示に従うと、接続拒否エラーが発生するのはなぜですか (また、amqplib 参照は、SQS の代わりに rabbitmq を使用しようとしていることを意味します)?
4

1 に答える 1

1

タスクをどのように呼び出しますか、使用していmanage.py shellますか?

import djcelery; djcelery.setup_loader()一番上に追加しましたsettings.pyか?

django-celeryが遅れているため、celeryとdjango-celeryのAPIは異なります。Celery 3.1はDjangoをすぐにサポートするため、新しいAPIをどこでも使用できます。

おもしろい日食について。Eclipseが静的分析を使用してモジュール内のシンボルを見つけることは可能ですか?その場合、celery / init.pyファイルに以下を追加するのに役立ちますか?

__all__ = ['Celery']

于 2012-08-01T15:36:25.123 に答える