[Zope-dev] remote procedure calls to manage functions
Michel Pelletier
michel@digicool.com
Wed, 09 Aug 2000 14:09:46 -0400
Jim Fulton wrote:
>
> Michel Pelletier wrote:
> >
> > > I thought XML-RPC was now favoured over ZClient?
> >
> > It's not really favored, both are quite useful. xml-rpc is more for
> > when you want two different system to interoperate. ZClient is very
> > zope specific and probably gives you a bit more functionality than
> > xml-rpc (because it has the 'remote object' abstraction).
>
> I don't think ZClient is really Zope specific. At least
> it's not supposed to be. It does have a richer API, including
> features like authentication and header support.
My bad, you're right.
> > Also, ZClient
> > is much faster i've found, probably due to the marshalling/unmarshalling
> > necessary for xml-rpc.
>
> That's interesting......Hm. ZClient has to marshal. I suspect that
> xml-rpc wants some sort of optimization.
I made a test script to make about 300 xmlrpc calls to various manage_
methods. I had to kill it after about a half-hour cuz it was takin so
long. Here's the profiler output:
ncalls tottime percall cumtime percall filename:lineno(function)
702883/2151 108.980 0.000 288.580 0.134
DT_InSV.py:379(__getitem__)
7704 79.050 0.010 243.900 0.032 xmllib.py:201(goahead)
3852 42.300 0.011 43.160 0.011
FileStorage.py:706(_finish)
158831/158827 38.010 0.000 70.140 0.000 DT_Var.py:258(render)
732178 37.580 0.000 49.450 0.000 re.py:112(match)
495239/51912 36.690 0.000 307.200 0.006
HTTPRequest.py:741(__getitem__)
586827 29.040 0.000 29.040 0.000 re.py:335(group)
499291 22.900 0.000 30.530 0.000 re.py:95(search)
875347 19.500 0.000 19.500 0.000 re.py:290(__init__)
45981 14.090 0.000 39.000 0.001
xmllib.py:539(parse_starttag)
748592 10.680 0.000 10.680 0.000 exceptions.py:65(__init__)
541924 9.420 0.000 9.420 0.000 re.py:297(start)
456273 9.190 0.000 9.190 0.000 re.py:306(end)
107831 8.520 0.000 8.520 0.000 urllib.py:898(quote)
127647/10757 7.400 0.000 300.080 0.028 :0(?)
49113 7.160 0.000 8.240 0.000
User.py:140(getRolesInContext)
127647/4302 6.350 0.000 303.910 0.071 DT_Util.py:325(eval)
45981 5.360 0.000 19.870 0.000
xmllib.py:615(parse_endtag)
111258 5.240 0.000 7.030 0.000
xmllib.py:699(handle_charref)
3856 5.100 0.001 17.020 0.004
BaseRequest.py:224(traverse)
284515 4.510 0.000 4.510 0.000 xmlrpclib.py:387(data)
I think you're right about optimizing, why is it spending most of it's
time in DT_InSV?
-Michel