1

私は現在、pythonのメソッドを使用するいくつかのコードを書き直していますselect.select()が、これらは、私が行かなければならないソケットオブジェクトのみを返し、そのソケットを の下に置かれたクラスのソケットに手動で一致させます__init__。そのための疑似コードは基本的に次のようになります[classobject for classobject in classList if SocketFromSelection == class.socketobject][0](私はこれをほとんど使用しています)。

Python のドキュメントでselect.select()、「適切な fileno() メソッド (ランダムな整数だけでなく、実際にファイル記述子を返す) があれば、自分でラッパー クラスを定義することもできます。」

select.select()私の質問は、ソケットだけでなくクラスを返すように、これらのクラスのシーケンスを渡すことができるように、クラスに fileno() メソッドをアタッチするにはどうすればよいですか? また、これはWindowsで実行されますか?そうでない場合、ソケットをクラスのリスト内のクラスのソケットに一致させるより良い方法はありますか?

4

1 に答える 1

4

socketobject質問に含めたコードから、内部に(属性として)ソケットを含むクラスがあるようです。この場合、ラッパーでソケットのメソッドをselectプロキシすることで、ラッパー オブジェクトを有効にすることができます。fileno

def SocketWrapper(object):
    def __init__(self, socket):
        self.socketobj = socket # use whatever you are already doing

    def fileno(self):
        return self.socketobj.fileno()

SocketWrapperのインスタンスを に直接渡すことができるようにselectなりました。ソケットを渡してから、どのソケットがどのインスタンスに対応するかを後で分類する必要はありません。

于 2013-09-28T20:16:29.127 に答える