Stefano,

ok now I get it:

in Python you can write the statement before the condition. Brilliant!!!

all fruits and vegetables <http://stackoverflow.com/questions/2802726/putting-a-simple-if-then-statement-on-one-line> or more coconuts <https://en.wikipedia.org/wiki/%3F:#Python>

Martin

P.S. one more (and last) apology to the owfs list


On 11/06/2015 02:33 PM, Martin Patzak (GMX) wrote:


On 11/06/2015 02:13 PM, Stefano Miccoli wrote:
For the ‘ it was cut and paste but my mail likes to ameliorate my mail and distinguish between opening and closing quotes,
Ok, I see

Please find the program snippet at https://gist.github.com/miccoli/3df5e84624b50cb070de

I run the program with python3, where ‘print’ is a function, so the conditional expression xifCelsey is correct (see https://docs.python.org/3/reference/expressions.html#conditional-expressions)

With python 2.7 ‘print’ is a statement, thus the syntax error. Under python 2.7 you can add, as the first statement

from __future__ import print_function

and everything should run smoothly.

S.
yes, that does the trick.


mnm@vincent:~/M/_Linux/python/_mnms_tests$ python pyownet_run_out_of_sockets.py
Iteration 0
Iteration 4096
Iteration 8192
Iteration 12288
Iteration 16384
Iteration 20480
Iteration 24576
Iteration 28672
Iteration 32468 raised exception: [Errno 99] Cannot assign requested address



PS: not very pythonic and cryptic, but I prefer the one-liner

print(mess_if_True) if C else print(mess_if_False)

rather than

if C:
    print(mess_True)
else:
print(mess_False)

maybe this does not belong in the owfs mailing list, so I apologize and keep it short:

I do not know much about much about Python, but I read somewhere that good python-code is like pseudo-code
so in that regard your one-liner is good Python after all.

BUT: what does the None do in front of the if??? It is not readable at all to me.

None if i % freq else print('Iteration {}'.format(i))



On 06 Nov 2015, at 13:10, Martin Patzak (GMX) <martin.pat...@gmx.de <mailto:martin.pat...@gmx.de>> wrote:

Stefano,

I wanted to try your program, but I get an error message:

mnm@vincent:~/M/_Linux/python/_mnms_tests$ python pyownet_run_out_of_sockets.py
  File "pyownet_run_out_of_sockets.py", line 13
    None if i % freq else print('Iteration {}'.format(i))
                              ^
SyntaxError: invalid syntax

since I am not very familiar with python I do not find the error on the spot... maybe you can help me out


btw. the line

    p = protocol.proxy(‘myowserver', persistent=False)

there is a typo: the first ' after ( is not a ' but a ‘ - it's hard to see here, but with syntax highlighting it is easy to spot ;o)

Martin


On 11/06/2015 11:20 AM, Stefano Miccoli wrote:
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> 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 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

------------------------------------------------------------------------------
_______________________________________________
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



------------------------------------------------------------------------------


_______________________________________________
Owfs-developers mailing list
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

Reply via email to