4
是否可以使用python的標準庫xmlrpclib和gevent?目前我試圖使用monkey.patch_all(),但沒有成功。在pyvent中使用gevent xmlrpclib
from gevent import monkey
monkey.patch_all()
import gevent
import time
import xmlrpclib
from SimpleXMLRPCServer import SimpleXMLRPCServer
import urllib2
def fetch(url):
g = gevent.spawn(urllib2.urlopen, url)
return g.get().read()
def is_even(n):
return n%2 == 0
def req(url):
return fetch(url)
server = SimpleXMLRPCServer(("localhost", 8000))
print "Listening on port 8000..."
server.register_function(is_even, "is_even")
server.register_function(req, "req")
server.serve_forever()
urllib2.urlopen阻止服務器。它看起來對我來說,monkey.patch_all沒有修補套接字,這就是爲什麼它會阻止。
謝謝!螺紋版本按預期工作!但如何從urllib2.urlopen異步返回結果? – frx 2010-11-01 06:20:10
我不確定我是否明白「異步返回結果」的含義。你想達到什麼目的? – 2010-11-01 06:22:41
糾正我,如果我即時通訊錯誤。每個新的連接都在新的greenlet中產生,所以我不需要在新的greenlet中產生urlopen。當urlopen被調用時,如果有多個連接或新事件發生,gevent會切換到其他協程,當內容到達套接字時,它會切換回urlopen協程並返回結果。 – frx 2010-11-01 08:28:19