だから私は、私のバックエンド、Pythonの取り扱いデータマイニングのために、このセットアップを持っているし、データベース(PyMongo経由のMongoDB)と通信し、 Node.js/ZeroRPCを通してPythonメソッドを呼び出すことを再開する。インスタンス化されたオブジェクトを渡すか、クラスメソッドによってクラス変数を初期化するには、サーバーZeroRPCを実行するには、エラーが発生し
次のように私は機能を持つ以下のクラスがあります。
Importer
- 輸入、変換、およびJSONデータをcsvファイルからデータをクリーンアップします。Database
- データベース・オブジェクトは、MongoClientを含み、Importer
からインポートされたデータの挿入を扱います。Analytics
- データマイニングメソッドを含むオブジェクト。zerorpc.Server
に渡すもの。データベースにアクセスする代わりに、インスタンスまたはDatabase
クラスを渡す必要があります。
私のapp.py
のようになります。
import os
import zerorpc
from scripts.database import Database
from scripts.importer import Importer
from scripts.analytics import Analytics
from utils.timer import time_function
ROOT = os.path.dirname(__file__)
if __name__ == "__main__":
importer = Importer()
db = Database(data=importer.data)
services = Analytics(db)
server = zerorpc.Server(services)
server.bind("tcp://0.0.0.0:1234")
server.run()
しかし、それはこのエラーを示しています
Traceback (most recent call last):
File "D:/Projects/Dashboards/app/app.py", line 28, in <module>
server = zerorpc.Server(Analytics())
File "D:\Projects\Dashboards\env\lib\site-packages\zerorpc\core.py", line 292, in __init__
pool_size, heartbeat)
File "D:\Projects\Dashboards\env\lib\site-packages\zerorpc\core.py", line 72, in __init__
self._methods[k] = rep(functor)
File "D:\Projects\Dashboards\env\lib\site-packages\zerorpc\decorators.py", line 36, in __init__
self.__name__ = functor.__name__
File "D:\Projects\Dashboards\env\lib\site-packages\pymongo\collection.py", line 262, in __getattr__
name, full_name, full_name))
AttributeError: Collection has no attribute '__name__'. To access the sales.__name__ collection, use database['sales.__name__'].
Process finished with exit code 1
「私はオブジェクト自体をオブジェクトのインスタンスを渡されていないので、多分。」だから、この時点で私は、実現クラスメソッドconnect_db
が一度Analytics
の__init__
た
from bson.son import SON
import datetime
class Analytics(object):
# def __init__(self, database):
# self.db = database.db
# self.sales = database.tb_sales
@classmethod
def connect_db(cls, database):
cls.db = database.db
cls.sales = database.tb_sales
...other methods here...
:
は、だから私は、この私にAnalytics
を形質転換しました。こうして、私のapp.py
に変更されます。
import os
import zerorpc
from scripts.database import Database
from scripts.importer import Importer
from scripts.analytics import Analytics
from utils.timer import time_function
ROOT = os.path.dirname(__file__)
if __name__ == "__main__":
importer = Importer()
db = Database(data=importer.data)
Analytics.connect_db(database=db)
server = zerorpc.Server(Analytics())
server.bind("tcp://0.0.0.0:1234")
server.run()
しかし、まだそれは同じエラーを示します。
それはなぜですか?何か案は? どういうわけか、zerorpc
の機能のうち__name__
をクライアントが呼び出せるようにするという性質があると思いますか?ちょうど私の2セント。