Pythonで小さなIRC接続を作成しようとしていますが、複数のサーバーに接続できるようにしたいので、サーバーに接続するサーバークラスを作成しました。サーバーをデータベースにも保存したかったので私はそれを行うためにsqlalchemyを使用しました。これはサーバークラスの初期化です
def __init__(self, server_name, server_address, server_port=6667):
threading.Thread.__init__(self)
self.server_name = server_name
self.server_address = server_address
self.server_port = server_port
奇妙な部分は、このようにクラスを「手動で」作成すると実際に機能することです
bla = IRCLib.connect("local","127.0.0.1")
このように接続し、まったく問題はありませんが、このように SQLAlchemy を介してクラスをロードすると
bla = db.BaseService.session.query(IRCLib.server)
res = bla.all()
res[0].connect()
このエラーが発生します
raise RuntimeError("thread.__init__() not called")
クラスの接続と実行機能はこれです
def connect(self):
self.irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
self.irc.connect ( ( self.server_address, self.server_port ) )
self.irc_file = self.irc.makefile("rb")
self.start()
def run(self):
print "in run"
self.irc.send ( 'NICK Test\r\n' )
self.irc.send ( 'USER lsb lsb lsb :lsb\r\n' )
while True:
data = self.irc_file.readline()
print data
私が言ったように、手動で行うと機能するため、SQLAlchemyで動作させるために何ができるか本当にわかりません。
ありがとう