では、crossbar.io を使用して Python でアプリをビルドしたいと思います。
デモを動作させることはできますが、私のアプリは、pycurl を使用して長寿命の http 接続をリッスンするスレッドをスピンオフする必要があります。
個別に、crossbar.io コードと pycurl コードは機能しますが、次の操作を行うと「インポートが見つかりません」というメッセージが表示されます。
import sys
from twisted.internet.defer import inlineCallbacks
from twisted.logger import Logger
from autobahn.twisted.util import sleep
from autobahn.twisted.wamp import ApplicationSession
from autobahn.wamp.exception import ApplicationError
from legacy_misc import Legacy_Listener
client = Legacy_Listener("box01")
client.daemon = True
client.start()
class AppSession(ApplicationSession):
log = Logger()
@inlineCallbacks
def onJoin(self, details):
# SUBSCRIBE to a topic and receive events
#
def onhello(msg):
self.log.info("event for 'onhello' received: {msg}", msg=msg)
yield self.subscribe(onhello, 'com.example.onhello')
self.log.info("subscribed to topic 'onhello'")
# REGISTER a procedure for remote calling
#
def add2(x, y):
self.log.info("add2() called with {x} and {y}", x=x, y=y)
return x + y
yield self.register(add2, 'com.example.add2')
self.log.info("procedure add2() registered")
# PUBLISH and CALL every second .. forever
#
counter = 0
while True:
# PUBLISH an event
#
yield self.publish('com.example.oncounter', counter)
self.log.info("published to 'oncounter' with counter {counter}",
counter=counter)
counter += 1
if counter > 5:
break
# CALL a remote procedure
#
try:
res = yield self.call('com.example.mul2', counter, 3)
self.log.info("mult() called with result: {result}",
result=res)
except ApplicationError as e:
# ignore errors due to the frontend not yet having
# registered the procedure we would like to call
if e.error != 'wamp.error.no_such_procedure':
raise e
yield sleep(1)
legacy_Listener には、「インポート pycurl」を含むスレッド コードが含まれています (このモジュールは単独でうまく機能します)。
crossbar.io のサンプル コードと独自のコードを混在させると、次のエラーが発生します。
2016-04-09T20:42:09+0100 [Container 26333] Worker process starting (PyPy-EPollReactor) ..
2016-04-09T20:42:13+0100 [コントローラー 26219] ID 'worker2' および PID 26333 のコンテナーが開始されました 2016-04-09T20:42:13+0100 [コンテナー 26333] コンポーネントの読み込みに失敗しました トレースバック (最新の呼び出しが最後) : ファイル "/opt/crossbar/site-packages/autobahn/wamp/websocket.py"、90 行目、onMessage self._session.onMessage(msg) ファイル "/opt/crossbar/site-packages/autobahn/wamp/protocol .py"、809 行目、onMessage on_reply = txaio.as_future(endpoint.fn, *invoke_args, **invoke_kwargs) ファイル "/opt/crossbar/site-packages/txaio/tx.py"、339 行目、as_future return MaybeDeferred(fun, *args, **kwargs) File "/opt/crossbar/site-packages/twisted/internet/defer.py", line 150, in MaybeDeferred result = f(*args, **kw) --- --- ファイル "/opt/crossbar/site-packages/crossbar/worker/container.py",192 行目、start_container_component create_component = _appsession_loader(config) ファイル内 "/opt/crossbar/site-packages/crossbar/worker/初期化.py"、74 行目、_appsession_loader pythonpath=sys.path autobahn.wamp.exception.ApplicationError: ApplicationError(error=, args=['Failed to import class \'hello.AppSession\'\nTraceback (最新の呼び出しが最後) :\n ファイル "/opt/crossbar/site-packages/autobahn/wamp/protocol.py"、809 行目、onMessage 内\n on_reply = txaio.as_future(endpoint.fn, *invoke_args, **invoke_kwargs)\n ファイル"/opt/crossbar/site-packages/txaio/tx.py"、339 行目、as_future 内\n return MaybeDeferred(fun, *args, **kwargs)\n ファイル "/opt/crossbar/site-packages/twisted /internet/defer.py"、150 行目、maybeDeferred\n 結果 = f(*args, **kw)\n ファイル "/opt/crossbar/site-packages/crossbar/worker/container.py"、192 行目、start_container_component\n create_component = _appsession_loader(config)\n--- ---\n ファイル "/opt/crossbar/site-packages/crossbar/worker/init .py"、58 行目、_appsession_loader 内\n module = importlib.import_module(module_name)\n ファイル "/opt/crossbar/lib-python/2.7/importlib/ init .py"、37 行目、import_module 内\n import (name)\n ファイル "/home/osboxes/qbtwebmon/hello.py"、36 行目、\n from legacy_misc import Legacy_Listener\nexceptions.ImportError: No module named legacy_misc\n']、kwargs={'pythonpath': [u'/home/osboxes/qbtwebmon', '/opt/crossbar/site-packages/crossbar/worker', '/opt/crossbar/bin', '/opt/crossbar/lib_pypy/拡張機能'、'/opt/crossbar/lib_pypy'、'/opt/crossbar/lib-python/2.7'、'/opt/crossbar/lib-python/2.7/lib-tk'、'/opt/crossbar/lib-python /2.7/plat-linux2', '/opt/crossbar/site-packages', '/home/osboxes/qbtwebmon/wamp_venv/lib/python2.7/site-packages']}, enc_algo=None)
2016-04-09T20:42:13+0100 [コンテナ 26333] Python モジュール検索パス: 2016-04-09T20:42:13+0100 [コンテナ 26333] /home/osboxes/qbtwebmon 2016-04-09T20:42:13 +0100 [コンテナー 26333] /opt/crossbar/site-packages/crossbar/worker 2016-04-09T20:42:13+0100 [コンテナー 26333] /opt/crossbar/bin 2016-04-09T20:42:13+0100 [コンテナ 26333] /opt/crossbar/lib_pypy/拡張機能 2016-04-09T20:42:13+0100 [コンテナ 26333] /opt/crossbar/lib_pypy 2016-04-09T20:42:13+0100 [コンテナ 26333] /opt/crossbar/lib-python/2.7 2016-04- 09T20:42:13+0100 [コンテナ 26333] /opt/crossbar/lib-python/2.7/lib-tk 2016-04-09T20:42:13+0100 [コンテナ 26333] /opt/crossbar/lib-python/2.7 /plat-linux2 2016-04-09T20:42:13+0100 [コンテナ 26333] /opt/crossbar/site-packages 2016-04-09T20:42:13+0100 [コンテナ 26333] /home/osboxes/qbtwebmon/wamp_venv /lib/python2.7/site-packages 2016-04-09T20:42:13+0100 [コンテナー 26333] NativeWorkerSession.onUserError 2016-04-09T20:42:13+0100 [コントローラー 26219] crossbar.error.class_import_failed: 失敗しましたクラス 'hello.AppSession' をインポートするにはin onMessage on_reply = txaio.as_future(endpoint.fn, *invoke_args, **invoke_kwargs) ファイル「/opt/crossbar/site-packages/txaio/tx.py」の 339 行目、as_future で MaybeDeferred(fun, *args, **kwargs) ファイル "/opt/crossbar/site-packages/twisted/internet/defer.py"、150 行目、maybeDeferred の結果 = f(*args, **kw) ファイル "/opt/crossbar/site-packages /crossbar/worker/container.py"、192 行目、start_container_component create_component = _appsession_loader(config) --- --- ファイル "/opt/crossbar/site-packages/crossbar/worker/行 150、maybeDeferred result = f(*args, **kw) File "/opt/crossbar/site-packages/crossbar/worker/container.py"、行 192、start_container_component create_component = _appsession_loader(config) --- --- ファイル "/opt/crossbar/site-packages/crossbar/worker/行 150、maybeDeferred result = f(*args, **kw) File "/opt/crossbar/site-packages/crossbar/worker/container.py"、行 192、start_container_component create_component = _appsession_loader(config) --- --- ファイル "/opt/crossbar/site-packages/crossbar/worker/init .py」、58 行目、_appsession_loader module = importlib.import_module(module_name) ファイル内 "/opt/crossbar/lib-python/2.7/importlib/ init .py"、37 行目、import_module import (name) ファイル内 "/ home/osboxes/qbtwebmon/hello.py", line 36, in from legacy_misc import Legacy_Listener exceptions.ImportError: Legacy_misc という名前のモジュールはありません
2016-04-09T20:42:13+0100 [コントローラー 26219] TERM をサブプロセス 26272 に送信しています 2016-04-09T20:42:13+0100 [コントローラー 26219] 26272 が終了するのを待っています...
何時間ものグーグル検索の後、クロスバー.ioが実行されているpypyでpycurlが機能しないことに気付きましたが、クロスバーを実行するために「pypyを使用」し、「cpythonを使用する」と言う方法があるかどうか疑問に思っていましたプロジェクトを実行していますか?
最後に、これはパスの問題ではありません。追加してテストしました。