Re: goless

Rob Galanakis <[email protected]> Fri, 6 Jun 2014 08:43:50 -0500
Newsgroups gmane.comp.python.stackless
Message-ID <CABaNhwp6syjk_MpnhxvuezgqaNrzB3D78+kDgch-RFJO1eKJDA@mail.gmail.com>
--===============7823649113441180789==
Content-Type: multipart/alternative; boundary=20cf307d064c3afb4a04fb2b0de6

--20cf307d064c3afb4a04fb2b0de6
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

OK, I did some proper benchmarking of CPython/PyPy and stackless/gevent
combinations: https://goless.readthedocs.org/en/latest/body.html#benchmarks
And made the benchmarks easier to run and report.

The common trend is:
PyPy/stackless =3D x
CPython/stackless =3D 2x-5x
PyPy/gevent =3D 5-10x
CPython/gevent =3D 15x-30x



On Tue, Jun 3, 2014 at 4:56 PM, Rob Galanakis <[email protected]>
wrote:

> 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 doi=
ng.
>>  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 ther=
e.
>> Maybe something is idiomatically very different, or is gevent performanc=
e
>> 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 beca=
use
>> 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
>> much 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 o=
n
>> 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=9Cstackless=
lib=E2=80=9D,
>> particularly the stacklesslib.wait module.  We now have =E2=80=9Cwaitabl=
e=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,
>> which can be either unbounded (the default) or have a maximum length.  T=
his
>> 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 =
that 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
>>
>
>

--20cf307d064c3afb4a04fb2b0de6
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">OK, I did some proper benchmarking of CPython/PyPy and sta=
ckless/gevent combinations:=C2=A0<a href=3D"https://goless.readthedocs.org/=
en/latest/body.html#benchmarks">https://goless.readthedocs.org/en/latest/bo=
dy.html#benchmarks</a><div>
And made the benchmarks easier to run and report.<br><div><br></div><div>Th=
e common trend is:</div><div>PyPy/stackless =3D x</div><div>CPython/stackle=
ss =3D 2x-5x</div><div>PyPy/gevent =3D 5-10x</div><div>CPython/gevent =3D 1=
5x-30x</div>
<div><br></div></div></div><div class=3D"gmail_extra"><br><br><div class=3D=
"gmail_quote">On Tue, Jun 3, 2014 at 4:56 PM, Rob Galanakis <span dir=3D"lt=
r">&lt;<a href=3D"mailto:[email protected]" target=3D"_blank">rob.gal=
[email protected]</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">Yes there is a gevent backe=
nd. Has been from day one. You can force one over the other by setting=C2=
=A0the GOLESS_BACKEND envvar to &#39;stackless&#39; or &#39;gevent&#39;.</d=
iv>
<div class=3D"HOEnZb"><div class=3D"h5"><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">&lt;<a href=3D"mailto:kristjan-hPzAiOG7rkJWk0Htik3J/[email protected]" target=3D"_blank">kri=
stjan-hPzAiOG7rkJWk0Htik3J/[email protected]</a>&gt;</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:&quot;Ca=
libri&quot;,&quot;sans-serif&quot;;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:&quot;Ca=
libri&quot;,&quot;sans-serif&quot;;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:&quot;Ca=
libri&quot;,&quot;sans-serif&quot;;color:#1f497d">K<u></u><u></u></span></p=
>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:&quot;Ca=
libri&quot;,&quot;sans-serif&quot;;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:&quot=
;Calibri&quot;,&quot;sans-serif&quot;">From:</span></b><span style=3D"font-=
size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;"> <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><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>
<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&#39;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&#39;t see anything ugly that we&#39;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 &lt;<a href=3D"mailto:kristjan-hPzAiOG7rkJWk0Htik3J/[email protected]" target=3D"_blank=
">kristjan-hPzAiOG7rkJWk0Htik3J/[email protected]</a>&gt; 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:&quot;Ca=
libri&quot;,&quot;sans-serif&quot;;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:&quot;Ca=
libri&quot;,&quot;sans-serif&quot;;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:&quot;Ca=
libri&quot;,&quot;sans-serif&quot;;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:&quot;Ca=
libri&quot;,&quot;sans-serif&quot;;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:&quot;Ca=
libri&quot;,&quot;sans-serif&quot;;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:&quot;Ca=
libri&quot;,&quot;sans-serif&quot;;color:#1f497d">=C2=A0</span><u></u><u></=
u></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:&quot;Ca=
libri&quot;,&quot;sans-serif&quot;;color:#1f497d">K</span><u></u><u></u></p=
>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt;font-family:&quot;Ca=
libri&quot;,&quot;sans-serif&quot;;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:&quot=
;Calibri&quot;,&quot;sans-serif&quot;">From:</span></b><span style=3D"font-=
size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;">
<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&#39;=
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 &lt;<a href=3D"mailto:kristjan-hPzAiOG7rkJWk0Htik3J/[email protected]" target=3D"_blan=
k">kristjan-hPzAiOG7rkJWk0Htik3J/[email protected]</a>&gt; 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&#39;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 -&gt; 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]" 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><br></blockqu=
ote></div><br></div>
</div></div></blockquote></div><br></div>

--20cf307d064c3afb4a04fb2b0de6--


--===============7823649113441180789==
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
--===============7823649113441180789==--