Ошибка закрытия соединения py-amqplib только в Google App Engine
Я пытаюсь использовать py-amqplib в Google App Engine для связи с кластером rabbitmq (также хостом на App Engine). У меня все работает, как и ожидалось, за исключением того, что, когда я иду, чтобы закрыть соединение, я выдал исключение
Exception on /api/***** [POST]
....
conn.close()
File "/base/data/home/apps/s~proj/1.382630193282536254/lib/amqplib/client_0_8/connection.py", line 314, in close
(10, 61), # Connection.close_ok
File "/base/data/home/apps/s~project/1.382630193282536254/lib/amqplib/client_0_8/abstract_channel.py", line 97, in wait
return self.dispatch_method(method_sig, args, content)
File "/base/data/home/apps/s~project/1.382630193282536254/lib/amqplib/client_0_8/abstract_channel.py", line 115, in dispatch_method
return amqp_method(self, args)
File "/base/data/home/apps/s~project/1.382630193282536254/lib/amqplib/client_0_8/connection.py", line 415, in _close_ok
self._do_close()
File "/base/data/home/apps/s~project/1.382630193282536254/lib/amqplib/client_0_8/connection.py", line 160, in _do_close
self.transport.close()
File "/base/data/home/apps/s~project/1.382630193282536254/lib/amqplib/client_0_8/transport.py", line 139, in close
self.sock.shutdown(socket.SHUT_RDWR)
File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/socket.py", line 222, in meth
return getattr(self._sock,name)(*args)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/remote_socket/_remote_socket.py", line 1148, in shutdown
raise _SystemExceptionFromAppError(e)
error: [Errno 22] Invalid argument
Я предполагаю, что это связано с реализацией remote_socket движка приложения, которая берет на себя всю исходящую связь сокетов.
Я убедился, что когда я запускаю код локально и через dev-сервер приложений, соединение закрывается должным образом (т. Е. Когда не используются удаленные сокеты).
Поэтому я ищу одну из двух вещей:
1) альтернативный способ отключения соединения amqp без выдачи ошибки сокета или подтверждение того, что, несмотря на ошибку, сокет закрыт и не оставлен открытым.
2) Альтернативный модуль Python amqp, который работает с движком приложения. Я пробовал 'amqp', который является вилкой для 'amqplib', но он требует ctypes и не смог загрузиться на app-engine. Я пробовал pika, которая также не работает на движке приложения из-за модуля fnctrl. У Carrot и Kombu есть сменный бэкэнд, но, похоже, они либо зависят от c-библиотек, либо используют amqplib в качестве бэкенда.