Re: goless
Rob Galanakis <[email protected]> Tue, 3 Jun 2014 16:56:13 -0500
| Newsgroups | gmane.comp.python.stackless |
|---|---|
| Message-ID | <CABaNhwpkpks9+UJRuXNK3YbM5pw2QR9dRiyEoeLK0tt1iNkorQ@mail.gmail.com> |
--===============9064672007457758321== Content-Type: multipart/alternative; boundary=047d7b6763b28e608504faf594e2 --047d7b6763b28e608504faf594e2 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Yes there is a gevent backend. Has been from day one. You can force one over the other by setting the GOLESS_BACKEND envvar to 'stackless' or 'gevent'. On Tue, Jun 3, 2014 at 7:45 AM, Kristj=C3=A1n Valur J=C3=B3nsson < kristjan-hPzAiOG7rkJWk0Htik3J/[email protected]> wrote: > I also think that gevent must be somehow sub-optimal. I=C2=B4ve seen > comparisons of python web frameworks where gevent based backends don=E2= =80=99t > perform that well in terms of latency. > > Waiting for your blog, I=C2=B4m still a bit confused at what you are doin= g. > did you implement goless with a gevent backend? > > K > > > > *From:* [email protected] [mailto: > [email protected]] *On Behalf Of *Rob Galanakis > *Sent:* 30. ma=C3=AD 2014 12:47 > > *To:* The Stackless Python Mailing List > *Subject:* Re: [Stackless] goless > > > > I was doing some benchmarking of goless under gevent and stackless. The > results are pretty astonishing when you do this stuff in the interpreter!= I > will put it on GitHub later today or tomorrow and also write up a blog. > It's possible our implementation is just not a good one regarding gevent, > but I sort of doubt it. The stackless/gevent specific code is minimal > (goless/backends.py) and I don't see anything ugly that we're doing there= . > Maybe something is idiomatically very different, or is gevent performance > just not very good? > > Anyway, it should be easy to profile eventually. > > > > Using backend StacklessBackend > > Benchmarking channels: > > 0.13s: Sync > > 0.14s: Async > > 0.13s: Buffered(1000) > > Benchmarking select: > > 0.29s: No default case. > > 0.15s: With default case. > > > > Using backend GeventBackend > > Benchmarking channels: > > 0.87s: Sync > > 0.83s: Async > > 0.82s: Buffered(1000) > > Benchmarking select: > > 1.12s: No default case. > > 0.16s: With default case. > > > > On Tue, May 27, 2014 at 7:17 AM, Kristj=C3=A1n Valur J=C3=B3nsson < > kristjan-hPzAiOG7rkJWk0Htik3J/[email protected]> wrote: > > Well, I started doing some documentation using sphinx the other day but > got sidetracked. > > The current documentation lives in the modules and in the unittests. > > I guess the only fiddly bit about it currently is to start it up. > Currently one has to explicitly get the main loop running. This is becau= se > stackless _*used*_ to only allow stackless.run() on the main tasklet. > The latest versions don=E2=80=99t. > > Once that restriction is removed, having the main loop run implicitly muc= h > as the gevent library does (when the Hub singleton is requested) is easy. > > I need to put that little brick in there, and then everything will run > smoothly J > > > > K > > > > *From:* [email protected] [mailto: > [email protected]] *On Behalf Of *Aleksandar Radulovic > *Sent:* 23. ma=C3=AD 2014 11:36 > > > *To:* The Stackless Python Mailing List > *Subject:* Re: [Stackless] goless > > > > Speaking of which, when can we see some more documentation or examples on > stacklesslib? ;) > > > > I was fiddling with it the other day and couldn't find any good enough > examples of stacklesslib usage.. > > > > Cheers, > > alex > > > > On Tue, May 20, 2014 at 12:13 PM, Kristj=C3=A1n Valur J=C3=B3nsson < > kristjan-hPzAiOG7rkJWk0Htik3J/[email protected]> wrote: > > You may want to take a look at the latest version of =E2=80=9Cstacklessl= ib=E2=80=9D, > particularly the stacklesslib.wait module. We now have =E2=80=9Cwaitable= =E2=80=9D > channels, so that you can do similar things to > > select, e.g. > > > > c1 =3D stacklesslib.wait.WaitChannel() > > c2 =3D stacklesslib.wait.WaitChannel() > > =E2=80=A6 > > for c in stacklesslib.wait.iwait([c1, c2]): > > if c is c1: percolate() > > elif c is c2: promulgate() > > > > A =E2=80=9CWaitChannel=E2=80=9D is ready when its balance is non-zero. > > There are also =E2=80=9CSendable=E2=80=9D and =E2=80=9CReceivable=E2=80= =9D adapters for WaitChannels to in > order to wait for either positive or negative balance. > > > > The stacklesslib.util.QueueChannel() is a channel with a fifo queue, whic= h > can be either unbounded (the default) or have a maximum length. This is,= I > believe, similar to Go=E2=80=99s channels. > > > > K > > > > > > *From:* [email protected] [mailto: > [email protected]] *On Behalf Of *Christian Tismer > *Sent:* 18. ma=C3=AD 2014 00:00 > *To:* The Stackless Python Mailing List > *Subject:* Re: [Stackless] goless > > > > On 18.04.14 12:46, Kristj=C3=A1n Valur J=C3=B3nsson wrote: > > Hi, I though=E2=80=99t I=E2=80=99d mention here an experimental problem t= hat a few of my > colleagues worked on during PyCon: > > Goless! > > http://goless.readthedocs.org/en/latest/index.html > > > > It also shows how more complex behavior can be built on top of the > relatively simple primitives that stackless provides. > > > (a bit late, but anyway better than never) > > Yes, quite neat thing. > This could be used as an interesting example for the Stackless talk. > > cheers - Chris > > p.s.: actually, I'm studying Go a bit, in order to understand > how they do stuff, how they lock, how they schedule, ... > > -- > > Christian Tismer :^) [email protected] > > Software Consulting : http://www.stackless.com/ > > Karl-Liebknecht-Str. 121 : http://www.pydica.net/ > > 14482 Potsdam : GPG key -> 0xFB7BEE0E > > phone +49 173 24 18 776 fax +49 (30) 700143-0023 > > > _______________________________________________ > Stackless mailing list > [email protected] > http://www.stackless.com/mailman/listinfo/stackless > > > > > > -- > a lex 13 x > http://a13x.net | @a13xnet > > > _______________________________________________ > Stackless mailing list > [email protected] > http://www.stackless.com/mailman/listinfo/stackless > > > > _______________________________________________ > Stackless mailing list > [email protected] > http://www.stackless.com/mailman/listinfo/stackless > --047d7b6763b28e608504faf594e2 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr">Yes there is a gevent backend. Has been from day one. You = can force one over the other by setting=C2=A0the GOLESS_BACKEND envvar to &= #39;stackless' or 'gevent'.</div><div class=3D"gmail_extra"><br= ><br><div class=3D"gmail_quote"> On Tue, Jun 3, 2014 at 7:45 AM, Kristj=C3=A1n Valur J=C3=B3nsson <span dir= =3D"ltr"><<a href=3D"mailto:kristjan-hPzAiOG7rkJWk0Htik3J/[email protected]" target=3D"_blank">kri= stjan-hPzAiOG7rkJWk0Htik3J/[email protected]</a>></span> wrote:<br><blockquote class=3D"gmail_quot= e" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> <div lang=3D"EN-US" link=3D"blue" vlink=3D"purple"> <div> <p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:"Ca= libri","sans-serif";color:#1f497d">I also think that gevent = must be somehow sub-optimal.=C2=A0 I=C2=B4ve seen comparisons of python web= frameworks where gevent based backends don=E2=80=99t perform that well in terms of latency.<u></u><u></u></span></p> <p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:"Ca= libri","sans-serif";color:#1f497d">Waiting for your blog, I= =C2=B4m still a bit confused at what you are doing. =C2=A0did you implement= goless with a gevent backend?<u></u><u></u></span></p> <p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:"Ca= libri","sans-serif";color:#1f497d">K<u></u><u></u></span></p= > <p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:"Ca= libri","sans-serif";color:#1f497d"><u></u>=C2=A0<u></u></spa= n></p> <div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm = 4.0pt"> <div> <div style=3D"border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0cm = 0cm 0cm"> <p class=3D"MsoNormal"><b><span style=3D"font-size:11.0pt;font-family:"= ;Calibri","sans-serif"">From:</span></b><span style=3D"font-= size:11.0pt;font-family:"Calibri","sans-serif""> <a hre= f=3D"mailto:[email protected]" target=3D"_blank">stackless-bo= [email protected]</a> [mailto:<a href=3D"mailto:stackless-bounces@stackle= ss.com" target=3D"_blank">[email protected]</a>] <b>On Behalf Of </b>Rob Galanakis<br> <b>Sent:</b> 30. ma=C3=AD 2014 12:47</span></p><div><div class=3D"h5"><br> <b>To:</b> The Stackless Python Mailing List<br> <b>Subject:</b> Re: [Stackless] goless<u></u><u></u></div></div><p></p> </div> </div><div><div class=3D"h5"> <p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p> <div> <p class=3D"MsoNormal">I was doing some benchmarking of goless under gevent= and stackless. The results are pretty astonishing when you do this stuff i= n the interpreter! I will put it on GitHub later today or tomorrow and also= write up a blog. It's possible our implementation is just not a good one regarding gevent, but I sort of doub= t it. The stackless/gevent specific code is minimal (goless/backends.py) an= d I don't see anything ugly that we're doing there. Maybe something= is idiomatically very different, or is gevent performance just not very good?<u></u><u></u></p> <div> <p class=3D"MsoNormal">Anyway, it should be easy to profile eventually.<u><= /u><u></u></p> <div> <p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p> <div> <div> <p class=3D"MsoNormal">Using backend StacklessBackend<u></u><u></u></p> </div> <div> <p class=3D"MsoNormal">Benchmarking channels:<u></u><u></u></p> </div> <div> <p class=3D"MsoNormal">=C2=A0 0.13s: Sync<u></u><u></u></p> </div> <div> <p class=3D"MsoNormal">=C2=A0 0.14s: Async<u></u><u></u></p> </div> <div> <p class=3D"MsoNormal">=C2=A0 0.13s: Buffered(1000)<u></u><u></u></p> </div> <div> <p class=3D"MsoNormal">Benchmarking select:<u></u><u></u></p> </div> <div> <p class=3D"MsoNormal">=C2=A0 0.29s: No default case.<u></u><u></u></p> </div> <div> <p class=3D"MsoNormal">=C2=A0 0.15s: With default case.<u></u><u></u></p> </div> <div> <p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p> </div> <div> <p class=3D"MsoNormal">Using backend GeventBackend<u></u><u></u></p> </div> <div> <p class=3D"MsoNormal">Benchmarking channels:<u></u><u></u></p> </div> <div> <p class=3D"MsoNormal">=C2=A0 0.87s: Sync<u></u><u></u></p> </div> <div> <p class=3D"MsoNormal">=C2=A0 0.83s: Async<u></u><u></u></p> </div> <div> <p class=3D"MsoNormal">=C2=A0 0.82s: Buffered(1000)<u></u><u></u></p> </div> <div> <p class=3D"MsoNormal">Benchmarking select:<u></u><u></u></p> </div> <div> <p class=3D"MsoNormal">=C2=A0 1.12s: No default case.<u></u><u></u></p> </div> <div> <p class=3D"MsoNormal">=C2=A0 0.16s: With default case.<u></u><u></u></p> </div> </div> </div> </div> </div> <div> <p class=3D"MsoNormal" style=3D"margin-bottom:12.0pt"><u></u>=C2=A0<u></u><= /p> <div> <p class=3D"MsoNormal">On Tue, May 27, 2014 at 7:17 AM, Kristj=C3=A1n Valur= J=C3=B3nsson <<a href=3D"mailto:kristjan-hPzAiOG7rkJWk0Htik3J/[email protected]" target=3D"_blank= ">kristjan-hPzAiOG7rkJWk0Htik3J/[email protected]</a>> wrote:<u></u><u></u></p> <blockquote style=3D"border:none;border-left:solid #cccccc 1.0pt;padding:0c= m 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm"> <div> <div> <p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:"Ca= libri","sans-serif";color:#1f497d">Well, I started doing som= e documentation using sphinx the other day but got sidetracked.</span><u></= u><u></u></p> <p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:"Ca= libri","sans-serif";color:#1f497d">The current documentation= lives in the modules and in the unittests.</span><u></u><u></u></p> <p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:"Ca= libri","sans-serif";color:#1f497d">I guess the only fiddly b= it about it currently is to start it up.=C2=A0 Currently one has to explici= tly get the main loop running. =C2=A0This is because stackless _<i>used</i>_ t= o only allow stackless.run() on the main tasklet.=C2=A0 The latest versions= don=E2=80=99t.</span><u></u><u></u></p> <p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:"Ca= libri","sans-serif";color:#1f497d">Once that restriction is = removed, having the main loop run implicitly much as the gevent library does (when the Hub singleton is requested) is easy.</span><u></u><u></u></= p> <p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:"Ca= libri","sans-serif";color:#1f497d">I need to put that little= brick in there, and then everything will run smoothly </span><span style=3D"font-size:11.0pt;font-family:Wingdings;color:#1f497d"= >J</span><u></u><u></u></p> <p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:"Ca= libri","sans-serif";color:#1f497d">=C2=A0</span><u></u><u></= u></p> <p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:"Ca= libri","sans-serif";color:#1f497d">K</span><u></u><u></u></p= > <p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:"Ca= libri","sans-serif";color:#1f497d">=C2=A0</span><u></u><u></= u></p> <div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm = 4.0pt"> <div> <div style=3D"border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0cm = 0cm 0cm"> <p class=3D"MsoNormal"><b><span style=3D"font-size:11.0pt;font-family:"= ;Calibri","sans-serif"">From:</span></b><span style=3D"font-= size:11.0pt;font-family:"Calibri","sans-serif""> <a href=3D"mailto:[email protected]" target=3D"_blank">stackl= [email protected]</a> [mailto:<a href=3D"mailto:stackless-bounces@s= tackless.com" target=3D"_blank">[email protected]</a>] <b>On Behalf Of </b>Aleksandar Radulovic<br> <b>Sent:</b> 23. ma=C3=AD 2014 11:36</span><u></u><u></u></p> <div> <div> <p class=3D"MsoNormal"><br> <b>To:</b> The Stackless Python Mailing List<br> <b>Subject:</b> Re: [Stackless] goless<u></u><u></u></p> </div> </div> </div> </div> <div> <div> <p class=3D"MsoNormal">=C2=A0<u></u><u></u></p> <div> <p class=3D"MsoNormal">Speaking of which, when can we see some more documen= tation or examples on stacklesslib? ;)<u></u><u></u></p> <div> <p class=3D"MsoNormal">=C2=A0<u></u><u></u></p> </div> <div> <p class=3D"MsoNormal">I was fiddling with it the other day and couldn'= t find any good enough examples of stacklesslib usage..<u></u><u></u></p> </div> <div> <p class=3D"MsoNormal">=C2=A0<u></u><u></u></p> </div> <div> <p class=3D"MsoNormal">Cheers,<u></u><u></u></p> </div> <div> <p class=3D"MsoNormal">alex<u></u><u></u></p> </div> </div> <div> <p class=3D"MsoNormal" style=3D"margin-bottom:12.0pt">=C2=A0<u></u><u></u><= /p> <div> <p class=3D"MsoNormal">On Tue, May 20, 2014 at 12:13 PM, Kristj=C3=A1n Valu= r J=C3=B3nsson <<a href=3D"mailto:kristjan-hPzAiOG7rkJWk0Htik3J/[email protected]" target=3D"_blan= k">kristjan-hPzAiOG7rkJWk0Htik3J/[email protected]</a>> wrote:<u></u><u></u></p> <blockquote style=3D"border:none;border-left:solid #cccccc 1.0pt;padding:0c= m 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-= bottom:5.0pt"> <div> <div> <p class=3D"MsoNormal"><span style=3D"color:#1f497d">You may want to take a= look at the latest version of =E2=80=9Cstacklesslib=E2=80=9D, particularly= the stacklesslib.wait module.=C2=A0 We now have =E2=80=9Cwaitable=E2=80=9D= channels, so that you can do similar things to</span><u></u><u></u></p> <p class=3D"MsoNormal"><span style=3D"color:#1f497d">select, e.g.</span><u>= </u><u></u></p> <p class=3D"MsoNormal"><span style=3D"color:#1f497d">=C2=A0</span><u></u><u= ></u></p> <p class=3D"MsoNormal"><span style=3D"color:#1f497d">c1 =3D stacklesslib.wa= it.WaitChannel()</span><u></u><u></u></p> <p class=3D"MsoNormal"><span style=3D"color:#1f497d">c2 =3D stacklesslib.wa= it.WaitChannel()</span><u></u><u></u></p> <p class=3D"MsoNormal"><span style=3D"color:#1f497d">=E2=80=A6</span><u></u= ><u></u></p> <p class=3D"MsoNormal"><span style=3D"color:#1f497d">for c in stacklesslib.= wait.iwait([c1, c2]):</span><u></u><u></u></p> <p class=3D"MsoNormal"><span style=3D"color:#1f497d">=C2=A0=C2=A0 if c is c= 1:=C2=A0 percolate()</span><u></u><u></u></p> <p class=3D"MsoNormal"><span style=3D"color:#1f497d">=C2=A0=C2=A0 elif c is= c2: promulgate()</span><u></u><u></u></p> <p class=3D"MsoNormal"><span style=3D"color:#1f497d">=C2=A0</span><u></u><u= ></u></p> <p class=3D"MsoNormal"><span style=3D"color:#1f497d">A =E2=80=9CWaitChannel= =E2=80=9D is ready when its balance is non-zero.</span><u></u><u></u></p> <p class=3D"MsoNormal"><span style=3D"color:#1f497d">There are also =E2=80= =9CSendable=E2=80=9D and =E2=80=9CReceivable=E2=80=9D adapters for WaitChan= nels to in order to wait for either positive or negative balance.</span><u>= </u><u></u></p> <p class=3D"MsoNormal"><span style=3D"color:#1f497d">=C2=A0</span><u></u><u= ></u></p> <p class=3D"MsoNormal"><span style=3D"color:#1f497d">The stacklesslib.util.= QueueChannel() is a channel with a fifo queue, which can be either unbounde= d (the default) or have a maximum length.=C2=A0 This is, I believe, similar to Go=E2=80=99s channels.</span><u></u><u></u></p> <p class=3D"MsoNormal"><span style=3D"color:#1f497d">=C2=A0</span><u></u><u= ></u></p> <p class=3D"MsoNormal"><span style=3D"color:#1f497d">K =C2=A0</span><u></u>= <u></u></p> <p class=3D"MsoNormal"><span style=3D"color:#1f497d">=C2=A0</span><u></u><u= ></u></p> <p class=3D"MsoNormal"><span style=3D"color:#1f497d">=C2=A0</span><u></u><u= ></u></p> <div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm = 4.0pt"> <div> <div style=3D"border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0cm = 0cm 0cm"> <p class=3D"MsoNormal"><b>From:</b> <a href=3D"mailto:[email protected]" target=3D"_blank">stackl= [email protected]</a> [mailto:<a href=3D"mailto:stackless-bounces@s= tackless.com" target=3D"_blank">[email protected]</a>] <b>On Behalf Of </b>Christian Tismer<br> <b>Sent:</b> 18. ma=C3=AD 2014 00:00<br> <b>To:</b> The Stackless Python Mailing List<br> <b>Subject:</b> Re: [Stackless] goless<u></u><u></u></p> </div> </div> <div> <div> <p class=3D"MsoNormal">=C2=A0<u></u><u></u></p> <div> <p class=3D"MsoNormal">On 18.04.14 12:46, Kristj=C3=A1n Valur J=C3=B3nsson = wrote:<u></u><u></u></p> </div> <blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt"> <p class=3D"MsoNormal">Hi, I though=E2=80=99t I=E2=80=99d mention here an e= xperimental problem that a few of my colleagues worked on during PyCon:<u><= /u><u></u></p> <p class=3D"MsoNormal">Goless!<u></u><u></u></p> <p class=3D"MsoNormal"><a href=3D"http://goless.readthedocs.org/en/latest/i= ndex.html" target=3D"_blank">http://goless.readthedocs.org/en/latest/index.= html</a><u></u><u></u></p> <p class=3D"MsoNormal">=C2=A0<u></u><u></u></p> <p class=3D"MsoNormal">It also shows how more complex behavior can be built= on top of the relatively simple primitives that stackless provides.<u></u>= <u></u></p> </blockquote> <p class=3D"MsoNormal" style=3D"margin-bottom:12.0pt"><br> (a bit late, but anyway better than never)<br> <br> Yes, quite neat thing.<br> This could be used as an interesting example for the Stackless talk.<br> <br> cheers - Chris<br> <br> p.s.: actually, I'm studying Go a bit, in order to understand<br> how they do stuff, how they lock, how they schedule, ...<u></u><u></u></p> <pre>-- <u></u><u></u></pre> <pre>Christian Tismer=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 :^)=C2=A0=C2=A0 <a href=3D"mailto:[email protected]" = target=3D"_blank">[email protected]</a><u></u><u></u></pre> <pre>Software Consulting=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 :=C2=A0=C2=A0=C2=A0=C2=A0 <a href=3D"http://www.stackless.com/" target= =3D"_blank">http://www.stackless.com/</a><u></u><u></u></pre> <pre>Karl-Liebknecht-Str. 121=C2=A0=C2=A0=C2=A0=C2=A0 :=C2=A0=C2=A0=C2=A0= =C2=A0 <a href=3D"http://www.pydica.net/" target=3D"_blank">http://www.pydi= ca.net/</a><u></u><u></u></pre> <pre>14482 Potsdam=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 :=C2=A0=C2=A0=C2=A0=C2=A0 GPG key -> 0= xFB7BEE0E<u></u><u></u></pre> <pre>phone <a href=3D"tel:%2B49%20173%2024%2018%20776" target=3D"_blank">+4= 9 173 24 18 776</a>=C2=A0 fax <a href=3D"tel:%2B49%20%2830%29%20700143-0023= " target=3D"_blank">+49 (30) 700143-0023</a><u></u><u></u></pre> </div> </div> </div> </div> </div> <p class=3D"MsoNormal"><br> _______________________________________________<br> Stackless mailing list<br> <a href=3D"mailto:[email protected]" target=3D"_blank">Stackless@stac= kless.com</a><br> <a href=3D"http://www.stackless.com/mailman/listinfo/stackless" target=3D"_= blank">http://www.stackless.com/mailman/listinfo/stackless</a><u></u><u></u= ></p> </blockquote> </div> <p class=3D"MsoNormal"><br> <br clear=3D"all"> <u></u><u></u></p> <div> <p class=3D"MsoNormal">=C2=A0<u></u><u></u></p> </div> <p class=3D"MsoNormal">-- <br> a lex 13 x<br> <a href=3D"http://a13x.net" target=3D"_blank">http://a13x.net</a> | @a13xne= t <u></u><u></u></p> </div> </div> </div> </div> </div> </div> <p class=3D"MsoNormal"><br> _______________________________________________<br> Stackless mailing list<br> <a href=3D"mailto:[email protected]" target=3D"_blank">Stackless@stac= kless.com</a><br> <a href=3D"http://www.stackless.com/mailman/listinfo/stackless" target=3D"_= blank">http://www.stackless.com/mailman/listinfo/stackless</a><u></u><u></u= ></p> </blockquote> </div> <p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p> </div> </div></div></div> </div> </div> <br>_______________________________________________<br> Stackless mailing list<br> <a href=3D"mailto:[email protected]">[email protected]</a><br> <a href=3D"http://www.stackless.com/mailman/listinfo/stackless" target=3D"_= blank">http://www.stackless.com/mailman/listinfo/stackless</a><br></blockqu= ote></div><br></div> --047d7b6763b28e608504faf594e2-- --===============9064672007457758321== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Stackless mailing list [email protected] http://www.stackless.com/mailman/listinfo/stackless --===============9064672007457758321==--