1

私はpythonを使用しており、クラスのメソッド内から

self.connection = pika.SelectConnection(
            self.connectionParameters,
            on_open_callback=self.onConnected,
            on_open_error_callback=self.onConnectionError,
            on_close_callback=self.onConnectionClosed,
            stop_ioloop_on_close=False)

私のソースコードでは、メソッドを(クラス内で)次のように宣言しています。

def onConnectionError(self):
    """
    @summary: Called if the connection to rabbit is unavailable.  Attempt to connect to one of   
        the many backup servers.
    @return: ??
    """

ただし、実行時に次のエラーが発生します。

Traceback (most recent call last):
  File "SpaceListener.py", line 218, in <module>
    cacheTime=args.timeout)
  File "SpaceListener.py", line 88, in __init__
    logger=self.logger)
  File "/home/centos/house/tes/castExchangeScan.py", line 108, in __init__
    stop_ioloop_on_close=False)
  File "build/bdist.linux-i686/egg/pika/adapters/select_connection.py", line 51, in __init__
  File "build/bdist.linux-i686/egg/pika/adapters/base_connection.py", line 62, in __init__
  File "build/bdist.linux-i686/egg/pika/connection.py", line 590, in __init__
  File "build/bdist.linux-i686/egg/pika/connection.py", line 707, in connect
  File "build/bdist.linux-i686/egg/pika/callback.py", line 61, in wrapper
  File "build/bdist.linux-i686/egg/pika/callback.py", line 92, in wrapper
  File "build/bdist.linux-i686/egg/pika/callback.py", line 232, in process
TypeError: onConnectionError() takes exactly 1 argument (2 given)
[centos@localhost ~/house/test]$  

このコールバックの実際のメソッド シグネチャを示すドキュメントを見つけることができませんでした。メソッドの非クラス定義を探していると思われます(つまり、パラメーターとしての自己がありません)。あれは正しいですか?もしそうなら?接続エラー時に再接続を試行できるように、クラス変数にアクセスするにはどうすればよいですか?

私が最初に探しているのは、メソッドの署名がどのように見えるべきかということだと思いますか?

前もって感謝します

4

2 に答える 2

1

したがって、コードを次のように変換することで、自分の質問に答えることができたようです。

私のコードを変換して、次のことを行います。

self.connection = pika.SelectConnection(self.connectionParameters,
        on_open_callback=self.onConnected, on_close_callback=self.onConnectionClosed,
        stop_ioloop_on_close=False)
self.connection.add_on_open_error_callback(self.onConnectionError)

これにより、新しいクラッシュ アドレスが表示され、pika のソース コードの新しい行が表示されます。

File "build/bdist.linux-i686/egg/pika/adapters/select_connection.py", line 51, in __init__
File "build/bdist.linux-i686/egg/pika/adapters/base_connection.py", line 62, in __init__
File "build/bdist.linux-i686/egg/pika/connection.py", line 590, in __init__
File "build/bdist.linux-i686/egg/pika/connection.py", line 707, in connect
File "build/bdist.linux-i686/egg/pika/callback.py", line 61, in wrapper
File "build/bdist.linux-i686/egg/pika/callback.py", line 92, in wrapper
File "build/bdist.linux-i686/egg/pika/callback.py", line 232, in process
File "build/bdist.linux-i686/egg/pika/connection.py", line 1192, in _on_connection_error
pika.exceptions.AMQPConnectionError: 1

connection.py を見ると、on_connection_error の予想されるメソッド シグネチャが生成されます。

def _on_connection_error(self, connection_unused):
    """Default behavior when the connecting connection can not connect.

    :raises: exceptions.AMQPConnectionError

    """
    raise exceptions.AMQPConnectionError(self.params.connection_attempts)

そのため、私は同じように悪い状態ですが、探していたメソッド シグネチャを持っているようです。

于 2013-10-08T18:36:03.757 に答える
0

私がこの道をたどっただけなので、0.10.0 で署名が変更されたようです。それは今です:

def _on_connection_error(self, connection_unused, error_message=None):
于 2016-01-01T00:19:42.743 に答える