Network programming stacklesssocket会影响其他基于套接字的模块

Network programming stacklesssocket会影响其他基于套接字的模块,network-programming,couchbase,python-stackless,Network Programming,Couchbase,Python Stackless,我有一个使用Stackless Python和stacklessocket.py的项目。我最近决定将Couchbase作为数据库后端添加到我的project to server中。我是按照工程师的指示做的。然而,它似乎与我的项目不兼容,并且随着进一步的调查,它似乎与Stacklessocket发生了冲突 显示我的项目的源代码可能过于复杂,但我将代码提炼为一个完全重现我得到的错误的案例: import couchbase # Monkeypatch in the 'stacklesssocket

我有一个使用Stackless Python和stacklessocket.py的项目。我最近决定将Couchbase作为数据库后端添加到我的project to server中。我是按照工程师的指示做的。然而,它似乎与我的项目不兼容,并且随着进一步的调查,它似乎与Stacklessocket发生了冲突

显示我的项目的源代码可能过于复杂,但我将代码提炼为一个完全重现我得到的错误的案例:

import couchbase

# Monkeypatch in the 'stacklesssocket' module, so we get blocking sockets
# which are Stackless compatible.  This example code will avoid any use of
# the Stackless sockets except through normal socket usage.
import stacklesssocket
stacklesssocket.install()
import socket

# connect to a couchbase server
cb = couchbase.Server('localhost:8091', username='username', password='password')

# use default bucket
default_bucket = cb['default']

# fetch a key with a function
print 'test = ' + str(default_bucket.get('test'))
如您所见,我正在添加stacklesssocket,然后尝试连接到Couchbase服务器。症状是下面的堆栈跟踪。我不确定Stacklessocket到底做了什么,但我知道它取代或增强了普通python套接字的功能。因此,Couchbase似乎正在使用套接字,其行为与预期不符:

Traceback (most recent call last):
  File "/Users/mark/Programming/MarkTestSite/server/src/dbteststackless.py", line 12, in <module>
    cb = couchbase.Server('localhost:8091', username='username', password='password')
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/couchbase/client.py", line 50, in __init__
    config = ServerHelper.parse_server_config(server_config_uri, username, password)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/couchbase/client.py", line 334, in parse_server_config
    response = urlopener.open(uri)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib.py", line 205, in open
    return getattr(self, name)(url)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib.py", line 344, in open_http
    h.endheaders()
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/httplib.py", line 904, in endheaders
    self._send_output()
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/httplib.py", line 776, in _send_output
    self.send(msg)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/httplib.py", line 735, in send
    self.connect()
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/httplib.py", line 716, in connect
    self.timeout)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 514, in create_connection
    raise error, msg
IOError: [Errno socket error] [Errno 61] Connection refused
按预期工作,并产生以下输出:

test = (0, 5, 'hello world')

我使用的是无堆栈python 2.6.5。是否有我可以使用的解决方案?或者Couchbase模块只是简单的和stacklesssocket不兼容?我真的想继续使用stackless python和stacklesssocket,因为我的项目是一个具有许多并发连接的网络服务器。我很感激大家的想法。

看来stacklesssocket代码正在以阻止Couchbase模块工作的方式取代socket代码。如果这是一个解决方案,你想继续,你可能会考虑联系CoucBASE,看看是否有什么他们可以做,使他们的模块兼容。至少让他们意识到冲突是个好主意,这是有道理的。我会让他们知道的。
test = (0, 5, 'hello world')