2016-04-09 10 views
0

OK, also möchte ich crossbar.io verwenden und eine App in Python erstellen.importiert pycurl zu crossbar.io Fehler aus

Ich kann die Demo funktionieren, aber meine App muss Threads abspalten, die pycurl verwenden, um langlebige http-Verbindungen zu hören.

getrennt, der crossbar.io-Code und die pycurl Code arbeiten, aber wenn ich das tue den folgenden erhalte ich "Import nicht gefunden":

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) 

Der legacy_Listener enthält den Thread-Code mit einem "Import pycurl" (dieses Modul funktioniert gut von selbst)

Jetzt, nachdem ich mit meinem eigenen Code, um den crossbar.io Beispiel-Code mischte, erhalte ich folgende Fehlermeldung:

2016-04-09T20:42:09+0100 [Container 26333] Worker process starting (PyPy-EPollReactor) .. 

2016-04-09 T20: 42: 13 + 0100 [Controller 26219] Container mit ID 'worker2' und PID 26333 gestartet 2016-04-09T20: 42: 13 + 0100 [Container 26333] Laden der Komponente fehlgeschlagen Traceback (letzter Anruf zuletzt): Datei "/opt/crossbar/site-packages/autobahn/wamp/websocket.py", Zeile 90, in onMessage self._session.onMessage (msg) Datei "/ opt/crossbar/site-packages/autobahn/wamp/protocol.py ", Zeile 809, in onMessage on_reply = txaio.as_future (Endpunkt.fn, * invoke_args, ** invoke_kwargs) Datei" /opt/crossbar/site-packages/txaio/tx.py ", Zeile 339, in as_future return maybayDerfered (fun, * args, ** kwargs) Datei "/opt/crossbar/site-packages/twisted/internet/defer.py", Zeile 150, in maybeDerfered result = f (* args , ** kw) --- --- Datei "/opt/crossbar/site-packages/crossbar/worker/container.py", Zeile 192, in start_container_component create_component = _appsession_loader (config) Datei "/ opt/Crossbar/site-packages/Crossbar/Arbeiter/init Py“, Zeile 74, in _appsession_loader PYTHONPATH = sys.path autobahn.wamp.exception.ApplicationError: Application (error =, args = [ 'zu Import fehlgeschlagen class \ 'hallo.AppSession \' \ nTrackeback (letzter Aufruf zuletzt): \ n Datei "/opt/crossbar/site-packages/autobahn/wamp/protocol.py", Zeile 809, in onMessage \ n on_reply = txaio. as_future (endpoint.fn, * invoke_args, ** invoke_kwargs) \ n Datei "/opt/crossbar/site-packages/txaio/tx.py", Zeile 339, in as_future \ n return maybattered (Spaß, * Argumente, ** kwargs) \ n Datei "/ opt/crossbar/site-packages /twisted/internet/defer.py ", Zeile 150, in vielleichtDeferent \ n result = f (* args, ** kw) \ n Datei" /opt/crossbar/site-packages/crossbar/worker/container.py ", Zeile 192, in start_container_component \ n create_component = _appsession_loader (config) \ n --- --- \ n Datei "/ opt/crossbar/site-packages/crossbar/worker/init .py", Zeile 58, in _appsession_loader \ n module = importlib.import_module (Modulname) \ n Datei "/opt/crossbar/lib-python/2.7/importlib/ init .py", Zeile 37, im Import_Modul \ n Import (Name) \ n Datei "/home/osboxes/qbtwebmon/hello.py", Zeile 36, in \ n von legacy_misc import Legacy_Listener \ nexceptions.ImportError: Kein Modul namens legacy_misc \ n '], kwarts = {' pythonpath ': [u'/home/osboxes/qbtwebmon ','/opt/crossbar/Seiten-Pakete/Querbalken/Arbeiter ','/opt/crossbar/bin ','/opt/crossbar/lib_pypy/Erweiterungen ','/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-Pakete ','/home/osboxes/qbtwebmon/wamp_venv/lib/python2.7/site-packages']}, enc_algo = None)

2016-04-09T20: 42: 13 + 0100 [Container 26333] Python Modulsuchpfade: 2016-04-09T20: 42: 13 + 0100 [ Container 26333]/home/osboxen/qbtwebmon 2016-04-09T20: 42: 13 + 0100 [Container 26333]/opt/crossbar/Standort-Pakete/Querbalken/Arbeiter 2016-04-09T20: 42: 13 + 0100 [ Container 26333]/opt/crossbar/bin 2016-04-09T20: 42: 13 + 0100 [Container 26333]/opt/crossbar/lib_pypy/Erweiterungen 2016-04-09T20: 42: 13 + 0100 [Container 26333 ]/opt/crossbar/lib_pypy 2016-04-09T20: 42: 13 + 0100 [Container 26333] /opt/crossbar/lib-python/2.7 2016-04-09T20: 42: 13 + 0100 [Container 26333]/opt/cr ossbar/lib-python/2.7/lib-tk 2016-04-09T20: 42: 13 + 0100 [Container 26333] /opt/crossbar/lib-python/2.7/plat-linux2 2016-04-09T20: 42: 13 + 0100 [Container 26333]/opt/crossbar/site-packages 2016-04-09T20: 42: 13 + 0100 [Container 26333] /home/osboxes/qbtwebmon/wamp_venv/lib/python2.7/site-packages 2016-04-09T20: 42: 13 + 0100 [Container 26333] NativeWorkerSession.onUserError 2016-04-09T20: 42: 13 + 0100 [Controller 26219] crossbar.error.class_import_failed: Fehler beim Importieren der Klasse 'hello.AppSession' Traceback (letzter Aufruf zuletzt): Datei "/opt/crossbar/site-packages/autobahn/wamp/protocol.py", Zeile 809, in onMessage on_reply = txaio.as_future (endpoint.fn, * invoke_args, ** invoke_kwargs) Datei "/ opt/crossbar/site-packag es/txaio/tx.py ", Zeile 339, in as_future Rückgabe maybayDerfered (fun, * args, ** kwargs) Datei" /opt/crossbar/site-packages/twisted/internet/defer.py ", Zeile 150 in maybeDeferred , Ergebnis = f (* args, ** kw) File "/opt/crossbar/site-packages/crossbar/worker/container.py", Linie 192, in start_container_component create_component = _appsession_loader (config) - - --- Datei "/ opt/Crossbar/site-packages/Crossbar/Arbeiter/init Py", Zeile 58, in _appsession_loader Modul = importlib.import_module (module_name) Datei „/ opt/Crossbar/lib-python/2.7/importlib/init .py ", Zeile 37, in Import_Modul Import (name) File "/home/osboxes/qbtwebmon/hello.py", Zeile 36, in von legacy_misc Import Legacy_Listener exceptions.ImportError: Nein legacy_misc namens Modul

2016-04-09T20: 42: 13 + 0100 [Controller 26219] sendet TERM zum Subprozess 26272 2016-04-09T20: 42: 13 + 0100 [Controller 26219] wartet auf 26272 zum Beenden ...

Jetzt nach stundenlangem googeln habe ich erkannte, dass pycurl nicht in pypy funktioniert, was crossbar.io läuft, aber ich frage mich, ob es eine Möglichkeit gibt, "pypy" zu sagen, um Crossbar auszuführen und "cpython" zum Ausführen des Projekts zu verwenden?

Schließlich ist dies nicht ein Pfadproblem, ich habe es angehängt und getestet dafür.

Antwort

0

OK behoben, im Grunde habe ich die "yum install crossbar" -Methode zur Installation verwendet, die in Pypy geschrieben ist. Wenn Sie über pip installieren, erhalten Sie die CPython-Version, die auch schneller ist als die pypy-Version IMHO.

Hinweis: Pip Crossbar installieren [alle] ist ein Schmerz, Sie beheben ein Kompilierungsproblem dann theres ein anderes, tun Sie einfach die Standard Pip Crossbar installieren.