Базовый пример Autobahn/Twisted не работает как исполняемый файл в Python 3.5

Я просто взял этот пример непосредственно из Autobahn, сохранил его как скрипт Python, а затем перенес его в дистрибутив Debian 9 с Python 3.5.3.

Я пытаюсь преобразовать этот файл в исполняемый файл.

Я сохранил файл как defer4.py, Я тогда побежал:

cython --embed -o defer4.c defer4.py;
gcc -Os -I /usr/include/python3.5m -o defer4 defer4.c -lpython3.5m -lpthread -lm -lutil -ldl

Это создало исполняемый файл под названием defer4 в той же папке. Тогда я бегу ./defer4 и получите эту ошибку:

2018-04-17T21:20:56-0400 connecting once using transport type "websocket" over endpoint "tcp"
2018-04-17T21:20:56-0400 Starting factory <autobahn.twisted.websocket.WampWebSocketClientFactory object at 0xb5a8c730>
2018-04-17T21:20:56-0400 While notifying 'join': Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/autobahn/wamp/protocol.py", line 508, in success
    d = self.fire('join', self, details)
  File "/usr/local/lib/python3.5/dist-packages/autobahn/util.py", line 817, in fire
    res.append(self._parent.fire(event, *args, **kwargs))
  File "/usr/local/lib/python3.5/dist-packages/autobahn/util.py", line 814, in fire
    future = txaio.as_future(handler, *args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/txaio/tx.py", line 417, in as_future
    return maybeDeferred(fun, *args, **kwargs)
--- <exception caught here> ---
  File "/usr/local/lib/python3.5/dist-packages/twisted/internet/defer.py", line 150, in maybeDeferred
    result = f(*args, **kw)
  File "/usr/local/lib/python3.5/dist-packages/twisted/internet/defer.py", line 1531, in unwindGenerator
    "instead got %r" % (f, gen))
builtins.TypeError: inlineCallbacks requires <cyfunction join at 0xb5a68030> to produce a generator; instead got <generator object at 0xb5a49300>

2018-04-17T21:20:56-0400 Unhandled error in Deferred:
2018-04-17T21:20:56-0400 Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/autobahn/wamp/protocol.py", line 508, in success
    d = self.fire('join', self, details)
  File "/usr/local/lib/python3.5/dist-packages/autobahn/util.py", line 817, in fire
    res.append(self._parent.fire(event, *args, **kwargs))
  File "/usr/local/lib/python3.5/dist-packages/autobahn/util.py", line 814, in fire
    future = txaio.as_future(handler, *args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/txaio/tx.py", line 417, in as_future
    return maybeDeferred(fun, *args, **kwargs)
--- <exception caught here> ---
  File "/usr/local/lib/python3.5/dist-packages/twisted/internet/defer.py", line 150, in maybeDeferred
    result = f(*args, **kw)
  File "/usr/local/lib/python3.5/dist-packages/twisted/internet/defer.py", line 1531, in unwindGenerator
    "instead got %r" % (f, gen))
builtins.TypeError: inlineCallbacks requires <cyfunction join at 0xb5a68030> to produce a generator; instead got <generator object at 0xb5a49300>

2018-04-17T21:20:56-0400 Unhandled error in Deferred:
2018-04-17T21:20:56-0400 Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/autobahn/wamp/protocol.py", line 508, in success
    d = self.fire('join', self, details)
  File "/usr/local/lib/python3.5/dist-packages/autobahn/util.py", line 817, in fire
    res.append(self._parent.fire(event, *args, **kwargs))
  File "/usr/local/lib/python3.5/dist-packages/autobahn/util.py", line 814, in fire
    future = txaio.as_future(handler, *args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/txaio/tx.py", line 417, in as_future
    return maybeDeferred(fun, *args, **kwargs)
--- <exception caught here> ---
  File "/usr/local/lib/python3.5/dist-packages/twisted/internet/defer.py", line 150, in maybeDeferred
    result = f(*args, **kw)
  File "/usr/local/lib/python3.5/dist-packages/twisted/internet/defer.py", line 1531, in unwindGenerator
    "instead got %r" % (f, gen))
builtins.TypeError: inlineCallbacks requires <cyfunction join at 0xb5a68030> to produce a generator; instead got <generator object at 0xb5a49300>

Я просматривал некоторые документы, чтобы выяснить, есть ли что-то в новом Python, которое может создавать проблему, или новый Python меняет способ обработки отложенных / генераторов. Я пока ничего не могу найти.

Знаете ли вы, почему эта проблема вызвана даже собственным примером Autobahn?

1 ответ

В Python ничего не изменилось, что могло бы сломать это, я только что протестировал это на системах Ubuntu 16.04 и 18.04, с python 3.5.2 и 3.6.5 соответственно и все работает нормально.

Так что проблема в том, как вы пытаетесь запустить это, что официально не поддерживается автобаном, так что вы, к сожалению, в значительной степени сами по себе.

Другие вопросы по тегам