A proxy object with 'persistent=False'will bind and destroy a socket for each call to the owserver. (If you call 'netstat -t’ after the timing test you will see hundreds of lines like tcp 0 0 localhost:45494 localhost:4304 TIME_WAIT which is the debris that remains after you tear down a socket…)
On the contrary with ‘persistent=True'a single socket is bound at the beginning of the transaction and reused for every subsequent owserver call. So 'persistent=False’ has a very small overhead (about 1ms) for each call. Somehow your figures are consistent with this interpretation: non-persistent overhead is a constant small delta with respect to persistent connection. Since your owserver is apparently much slower than the one which I run my tests, you have a smaller relative overhead. Usually I would not care about the persistent/non persistent thing, unless you are running out of available sockets. This program import itertools from pyownet import protocol p = protocol.proxy(‘myowserver', persistent=False) freq = 1 << 12 for i in itertools.count(): try: c = p.dir() except protocol.Error as exc: print('Iteration {0} raised exception: {1}'.format(i, exc)) break None if i % freq else print('Iteration {}'.format(i)) prints Iteration 0 Iteration 4096 Iteration 8192 Iteration 12288 Iteration 16384 Iteration 16977 raised exception: [Errno 49] Can't assign requested address so it is possible to run out of sockets, although this is a rather edgy situation, that I’ve never analysed in detail. S. > On 06 Nov 2015, at 02:26, Loren Amelang <lo...@pacific.net > <mailto:lo...@pacific.net>> wrote: > > On Thu, 05 Nov 2015 13:02:13 +0100, > Stefano Miccoli mo...@icloud.com <mailto:mo...@icloud.com> wrote: > ... >> Just a few numbers, collected with >> https://github.com/miccoli/pyownet/blob/master/test/timing.py >> <https://github.com/miccoli/pyownet/blob/master/test/timing.py> >> <https://github.com/miccoli/pyownet/blob/master/test/timing.py> querying a >> non localhost production owserver > >> pyownet: ver. 0.8.2 >> proxy_obj: ownet server at ('10.48.74.112', 4304) >> server info: pid 2662, ver. unknown >> >> timeit: >> statement: proxy_obj.dir("/") >> number: 20 >> repetitions: 5 >> >> ** non persistent : 1.29 ms, 1.30 ms, 1.30 ms, 1.33 ms, 1.36 ms, >> ** persistent : 0.77 ms, 0.77 ms, 0.79 ms, 0.80 ms, 0.97 ms, > >> The figure reported here are time for a single call to the given method, >> computed as the average of 20 consecutive calls. (Please note that I read >> the cached temperature value? uncached is of course much slower, but this >> is due to 1-wire) > > > I was surprised by the timing numbers you posted. So I tried your test script > with my BBB installation... > > Running on the BBB with the owserver: > --- > ubuntu@arm:~/Lpkg$ python3 StefanoTimingTest.py3 > pyownet: ver. 0.8.2 > (/usr/local/lib/python3.4/dist-packages/pyownet/__init__.py) > proxy_obj: ownet server at ('127.0.0.1', 4304) > server info: pid 1243, ver. unknown > > timeit: > statement: proxy_obj.dir("/") > number: 20 > repetitions: 5 > > ** non persistent : 37.55 ms, 37.78 ms, 39.26 ms, 40.15 ms, 41.11 ms, > ** persistent : 36.22 ms, 36.41 ms, 36.62 ms, 37.10 ms, 38.26 ms, > --- > > > Running Python on an external Windows machine, one Wi-Fi hop from the BBB: > --- > C:\Users\Loren\Documents\Projects\Computing\BeagleBone Black\BBB > Projects\1-Wire\OWFS Python logging>python StefanoTimingTest.py3 > owserver://10.1.1.4:4304 <owserver://10.1.1.4:4304> > pyownet: ver. 0.8.2 (C:\Apps\Python33\lib\site-packages\pyownet\__init__.py) > proxy_obj: ownet server at ('10.1.1.4', 4304) > server info: pid 22210, ver. unknown > > timeit: > statement: proxy_obj.dir("/") > number: 20 > repetitions: 5 > > ** non persistent : 41.69 ms, 45.79 ms, 45.99 ms, 48.34 ms, 49.41 ms, > ** persistent : 42.26 ms, 44.03 ms, 45.68 ms, 45.69 ms, 46.03 ms, > --- > > > Between those two tests was a long learning session. For those who don't > know... > > In netstat, "0.0.0.0" addresses are accessible from outside machines, > 127.0.0.1 addresses are not! > > The localhost setting is in (at least) two places in /etc/owfs.conf: > ! server: server = 10.1.1.4:4304 # localhost:4304 LA151105 allow net access > And: > server: port = 4304 # localhost:4304 LA151105 allow net access > > After making those changes, I found "restart" does not notice them! You have > to use "force-reload": > ubuntu@arm:~/Lpkg$ sudo /etc/init.d/owserver force-reload > * Restarting 1-Wire TCP Server owserver > > Suddenly it works from out on the network! > > > So I wonder why persistence makes less than 10% difference here, while on > your much faster machine it makes 25 to 40%... > > | Loren Amelang | lo...@pacific.net <mailto:lo...@pacific.net> | > > > > > ------------------------------------------------------------------------------ > _______________________________________________ > Owfs-developers mailing list > Owfs-developers@lists.sourceforge.net > <mailto:Owfs-developers@lists.sourceforge.net> > https://lists.sourceforge.net/lists/listinfo/owfs-developers
------------------------------------------------------------------------------
_______________________________________________ Owfs-developers mailing list Owfs-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/owfs-developers