0

だから私は私にこのAmbiguousTimeErrorを与えているdjangoサイトを持っています。検索インデックスを更新する前に短いタイムアウトが与えられた製品が保存されたときに、ジョブがアクティブ化されます。夏時間に更新が行われたようで、pytzはそれをどうするかを理解できません。

次回DSTの時間がシフトしたときに、これが発生しないようにするにはどうすればよいですか?

[2012-11-06 14:22:52,115: ERROR/MainProcess] Unrecoverable error: AmbiguousTimeError(datetime.datetime(2012, 11, 4, 1, 11, 4, 335637),)
Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/celery/worker/__init__.py", line 353, in start
    component.start()
  File "/usr/local/lib/python2.6/dist-packages/celery/worker/consumer.py", line 369, in start
    self.consume_messages()
  File "/usr/local/lib/python2.6/dist-packages/celery/worker/consumer.py", line 842, in consume_messages
    self.connection.drain_events(timeout=10.0)
  File "/usr/local/lib/python2.6/dist-packages/kombu/connection.py", line 191, in drain_events
    return self.transport.drain_events(self.connection, **kwargs)
  File "/usr/local/lib/python2.6/dist-packages/kombu/transport/virtual/__init__.py", line 760, in drain_events
    self._callbacks[queue](message)
  File "/usr/local/lib/python2.6/dist-packages/kombu/transport/virtual/__init__.py", line 465, in _callback
    return callback(message)
  File "/usr/local/lib/python2.6/dist-packages/kombu/messaging.py", line 485, in _receive_callback
    self.receive(decoded, message)
  File "/usr/local/lib/python2.6/dist-packages/kombu/messaging.py", line 457, in receive
    [callback(body, message) for callback in callbacks]
  File "/usr/local/lib/python2.6/dist-packages/celery/worker/consumer.py", line 560, in receive_message
    self.strategies[name](message, body, message.ack_log_error)
  File "/usr/local/lib/python2.6/dist-packages/celery/worker/strategy.py", line 25, in task_message_handler
    delivery_info=message.delivery_info))
  File "/usr/local/lib/python2.6/dist-packages/celery/worker/job.py", line 120, in __init__
    self.eta = tz_to_local(maybe_iso8601(eta), self.tzlocal, tz)
  File "/usr/local/lib/python2.6/dist-packages/celery/utils/timeutils.py", line 52, in to_local
    dt = make_aware(dt, orig or self.utc)
  File "/usr/local/lib/python2.6/dist-packages/celery/utils/timeutils.py", line 211, in make_aware
    return localize(dt, is_dst=None)
  File "/usr/local/lib/python2.6/dist-packages/pytz/tzinfo.py", line 349, in localize
    raise AmbiguousTimeError(dt)
AmbiguousTimeError: 2012-11-04 01:11:04.335637

編集:私はセロリのこのコードで一時的にそれを修正しました:

celery / worker / job.py@120行目

try:
     self.eta = tz_to_local(maybe_iso8601(eta), self.tzlocal, tz)
except:
     self.eta = None

pipがインストールされているアプリに変更を加えたくないので、コードでできることを修正する必要があります。

これは、アプリを保存するときに実行されます。

self.task_cls.apply_async(
    args=[action, get_identifier(instance)],
    countdown=15
)

あいまいな時間になっているかどうかをなんとかして検出し、カウントダウンを調整する必要があると思います。

4

2 に答える 2

1

これを修正するにはタスクをクリアする必要があると思いますが、次にDSTの時間がシフトしたときに、これが発生しないようにするにはどうすればよいですか?

何をしているのかは明確ではありませんが(コードは表示されていません)、基本的には世界の仕組みを考慮する必要があります。時刻が1時間戻るときに、現地時間からUTC(または別のゾーンの現地時間)に変換するときに、あいまいな時刻が発生するのを避けることはできません。

同様に、合理的な現地時間が発生しない「ギャップ」または「不可能」な時間があることに注意する必要があります。

Pythonがどのようなオプションを提供するかはわかりませんが、理想的には、APIを使用すると、エラーをスローするか、前に発生するか、後で発生するか、または他の何かを提供するかどうかにかかわらず、あいまいな時間を解決できます。

于 2012-11-06T21:44:04.803 に答える
0

どうやら、セロリはこの問題を解決しました:

https://github.com/celery/celery/issues/1061

于 2012-11-20T15:20:24.110 に答える