Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyMonogo+;Gevent1.0 ReplicateSetClient永远不会返回_Python_Mongodb_Pymongo_Gevent - Fatal编程技术网

Python PyMonogo+;Gevent1.0 ReplicateSetClient永远不会返回

Python PyMonogo+;Gevent1.0 ReplicateSetClient永远不会返回,python,mongodb,pymongo,gevent,Python,Mongodb,Pymongo,Gevent,我正在尝试使用带有gevent的mongo引擎连接到mongo服务器。报告说gevent支持非常直接。由于gevent发布了1.0,上面链接的示例无法与PyMongo MongoReplicaSetClient一起使用 如果打开python提示符并尝试示例中的代码,请注意: from gevent import monkey; monkey.patch_socket() from pymongo.mongo_replica_set_client import MongoReplicaSetCli

我正在尝试使用带有gevent的mongo引擎连接到mongo服务器。报告说gevent支持非常直接。由于gevent发布了1.0,上面链接的示例无法与PyMongo MongoReplicaSetClient一起使用

如果打开python提示符并尝试示例中的代码,请注意:

from gevent import monkey; monkey.patch_socket()
from pymongo.mongo_replica_set_client import MongoReplicaSetClient
rsc = MongoReplicaSetClient('mongodb://localhost:27017,localhost:27018,localhost:27019', replicaSet='repl0', use_greenlets=True)
print rsc
MongoReplicaSetClient([u'localhost:27017'])
我将此代码保存为名为connection.py的文件。如果我从命令行运行这个文件,它可以正常工作

$python connection.py
MongoReplicaSetClient([u'localhost:27017'])
但如果我尝试导入此模块,它将永远不会返回。最后我必须按Ctrl-C键:

$ python
Python 2.7.5 (default, May 21 2013, 14:51:47) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from ecs.db.mongo import connection
^CKeyboardInterrupt
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "ecs/db/mongo/connection.py", line 15, in <module>
    c = MongoReplicaSetClient('mongodb://localhost/ecs', replicaSet='ecsReplicaSet', use_greenlets=True)
  File "/home/daniels/.virtualenvs/parlant-ecs-env/lib/python2.7/site-packages/pymongo/mongo_replica_set_client.py", line 742, in __init__
    self.refresh()
  File "/home/daniels/.virtualenvs/parlant-ecs-env/lib/python2.7/site-packages/pymongo/mongo_replica_set_client.py", line 1179, in refresh
    res, connection_pool, ping_time = self.__is_master(host)
  File "/home/daniels/.virtualenvs/parlant-ecs-env/lib/python2.7/site-packages/pymongo/mongo_replica_set_client.py", line 1056, in __is_master
    sock_info = connection_pool.get_socket()
  File "/home/daniels/.virtualenvs/parlant-ecs-env/lib/python2.7/site-packages/pymongo/pool.py", line 339, in get_socket
    sock_info, from_pool = self.connect(pair), False
  File "/home/daniels/.virtualenvs/parlant-ecs-env/lib/python2.7/site-packages/pymongo/pool.py", line 265, in connect
    sock = self.create_connection(pair)
  File "/home/daniels/.virtualenvs/parlant-ecs-env/lib/python2.7/site-packages/pymongo/pool.py", line 237, in create_connection
    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
  File "/home/daniels/.virtualenvs/parlant-ecs-env/lib/python2.7/site-packages/gevent/socket.py", line 621, in getaddrinfo
    return get_hub().resolver.getaddrinfo(host, port, family, socktype, proto, flags)
  File "/home/daniels/.virtualenvs/parlant-ecs-env/lib/python2.7/site-packages/gevent/resolver_thread.py", line 34, in getaddrinfo
    return self.pool.apply_e(self.expected_errors, _socket.getaddrinfo, args, kwargs)
  File "/home/daniels/.virtualenvs/parlant-ecs-env/lib/python2.7/site-packages/gevent/threadpool.py", line 222, in apply_e
    success, result = self.spawn(wrap_errors, expected_errors, function, args, kwargs).get()
  File "/home/daniels/.virtualenvs/parlant-ecs-env/lib/python2.7/site-packages/gevent/event.py", line 226, in get
    result = self.hub.switch()
  File "/home/daniels/.virtualenvs/parlant-ecs-env/lib/python2.7/site-packages/gevent/hub.py", line 331, in switch
    return greenlet.switch(self)
KeyboardInterrupt
$python
Python 2.7.5(默认,2013年5月21日,14:51:47)
[GCC 4.4.7 20120313(Red Hat 4.4.7-3)]关于linux2
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>从ecs.db.mongo导入连接
^卡基波德诺特酒店
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“ecs/db/mongo/connection.py”,第15行,在
c=MongoReplicateSetClient('mongodb://localhost/ecs,replicset='ecsreplicset',使用_greenlets=True)
文件“/home/daniels/.virtualenvs/parlant ecs env/lib/python2.7/site packages/pymongo/mongo\u replica\u set\u client.py”,第742行,在初始化中__
self.refresh()
文件“/home/daniels/.virtualenvs/parlant ecs env/lib/python2.7/site packages/pymongo/mongo\u replica\u set\u client.py”,第1179行,刷新
res,连接池,ping\u time=self.\u是\u主(主机)
文件“/home/daniels/.virtualenvs/parlant ecs env/lib/python2.7/site packages/pymongo/mongo\u replica\u set\u client.py”,第1056行,在主文件中
sock\u info=connection\u pool.get\u socket()
文件“/home/daniels/.virtualenvs/parlant ecs env/lib/python2.7/site packages/pymongo/pool.py”,第339行,在get_socket中
sock\u info,from\u pool=self.connect(对),False
文件“/home/daniels/.virtualenvs/parlant ecs env/lib/python2.7/site packages/pymongo/pool.py”,第265行,在connect中
sock=self.create\u连接(对)
文件“/home/daniels/.virtualenvs/parlant ecs env/lib/python2.7/site packages/pymongo/pool.py”,第237行,位于create_connection中
对于socket.getaddrinfo(主机、端口、系列、socket.SOCK\u流)中的res:
getaddrinfo中的文件“/home/daniels/.virtualenvs/parlant ecs env/lib/python2.7/site packages/gevent/socket.py”,第621行
返回get_hub().resolver.getaddrinfo(主机、端口、系列、socktype、proto、标志)
文件“/home/daniels/.virtualenvs/parlant ecs env/lib/python2.7/site packages/gevent/resolver_thread.py”,第34行,在getaddrinfo中
返回self.pool.apply_e(self.expected_错误,_socket.getaddrinfo、args、kwargs)
文件“/home/daniels/.virtualenvs/parlant-ecs-env/lib/python2.7/site-packages/gevent/threadpool.py”,第222行,在应用程序中
success,result=self.spawn(包装错误、预期错误、函数、args、kwargs).get()
get中的文件“/home/daniels/.virtualenvs/parlant ecs env/lib/python2.7/site packages/gevent/event.py”,第226行
结果=self.hub.switch()
文件“/home/daniels/.virtualenvs/parlant ecs env/lib/python2.7/site packages/gevent/hub.py”,第331行,在交换机中
返回绿色小开关(自)
键盘中断
我不确定我遗漏了什么,但PyMongo和gevent 1.0似乎有问题。这在gevent 0.13.8中运行良好

编辑:我刚找到pymongo,它解释了问题,并提供了一些解决方案