<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Yarko Tymciurak kirjoitti 09.06.2017 klo 09:19:<br>
    <blockquote type="cite"
cite="mid:CAJ+Z=PJkzrQ+bYgqbX6mPePOREP1s=VT_wEVkC1rrNf6iELbgg@mail.gmail.com">
      <div><br>
        <div class="gmail_quote">
          <div>On Fri, Jun 9, 2017 at 12:48 AM Nathaniel Smith <<a
              href="mailto:njs@pobox.com" moz-do-not-send="true">njs@pobox.com</a>>
            wrote:<br>
          </div>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">On Thu,
            Jun 8, 2017 at 3:32 PM, manuel miranda <<a
              href="mailto:manu.mirandad@gmail.com" target="_blank"
              moz-do-not-send="true">manu.mirandad@gmail.com</a>>
            wrote:<br>
            > Hello everyone,<br>
            ><br>
            > After using asyncio for a while, I'm struggling to find
            information about<br>
            > how to support both synchronous and asynchronous use
            cases for the same<br>
            > library.<br>
            ><br>
            > I.e. imagine you have a package for http requests and
            you want to give the<br>
            > user the choice to use a synchronous or an asynchronous
            interface. Right now<br>
            > the approach the community is following is creating
            separate libraries one<br>
            > for each version. This is far from ideal for several
            reasons, some I can<br>
            > think of:<br>
            ><br>
            > - Code duplication, most of the functionality is the
            same in both libraries,<br>
            > only difference is the sync/async behaviors<br>
            > - Some new async libraries lack functionality compared
            to their sync<br>
            > siblings. Others will introduce bugs that the sync
            version already solved<br>
            > long ago, etc.<br>
            > - Different interfaces for the user for the same exact
            functionality.<br>
            ><br>
            > In summary, in some cases it looks like reinventing the
            wheel. So now comes<br>
            > the question, is there any documentation, guide on what
            would be best<br>
            > practice supporting this kind of duality?<br>
            <br>
            I would say that this is something that we as a community
            are still<br>
            figuring out. I really like the Sans-IO approach, and it's a
            really<br>
            valuable piece of the solution, but it doesn't solve the
            whole problem<br>
            by itself - you still need to actually do I/O, and this
            means things<br>
            like error handling and timeouts that aren't obviously a
            natural fit<br>
            to the Sans-IO approach, and this means you may still have
            some tricky<br>
            code that can end up duplicated. (Or maybe the Sans-IO
            approach can be<br>
            extended to handle these things too?) There are active
            discussions<br>
            happening in projects like urllib3 [1] and packaging [2]
            about what<br>
            the best strategy to take is. And the options vary a lot
            depending on<br>
            whether you need to support python 2 etc.<br>
            <br>
            If you figure out a good approach I think everyone would be
            interested<br>
            to hear it :-)<br>
          </blockquote>
          <div><br>
          </div>
          <div>Just to leave this breadcrumb here - I've said this
            before, but not thought in depth about it a lot, but pretty
            sure that in something like Python4, async needs to become
            "first class citizen," that is from the inside out, right in
            the bowels of the repl loop.</div>
          <div><br>
          </div>
        </div>
      </div>
    </blockquote>
    Python 4 will be nothing more than the next minor release after 3.9.
    Because Guido hates double digit minor versions :)<br>
    <blockquote type="cite"
cite="mid:CAJ+Z=PJkzrQ+bYgqbX6mPePOREP1s=VT_wEVkC1rrNf6iELbgg@mail.gmail.com">
      <div>
        <div class="gmail_quote">
          <div>If async is the default, and synchronous calls just a
            special case (e.g. single-task async), then I'd expect two
            things (at least): developers would have an easier time,
            make fewer mistakes in async programming (the language would
            handle more), and libraries would be unified as async &
            sync would be the same.</div>
        </div>
      </div>
    </blockquote>
    Are you suggesting the removal of the "await", "async with" and
    "async for" structures? Those were added deliberately so developers
    can spot the yield points in a coroutine function. Not having them
    would give us something like gevent where you can never tell when
    your task is going to be adjourned in favor of another.<br>
    <blockquote type="cite"
cite="mid:CAJ+Z=PJkzrQ+bYgqbX6mPePOREP1s=VT_wEVkC1rrNf6iELbgg@mail.gmail.com">
      <div>
        <div class="gmail_quote">
          <div><br>
          </div>
          <div>Maybe there's something that would make this not make
            sense, but I'd be really surprised.  Larry's gil removal
            work intuitively seems an enabler for this kind of
            (potential) work...</div>
          <div><br>
          </div>
          <div>-y</div>
          <div><br>
          </div>
          <div><br>
          </div>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
            -n<br>
            <br>
            [1] <a
href="https://github.com/shazow/urllib3/pull/1068#issuecomment-294422348"
              rel="noreferrer" target="_blank" moz-do-not-send="true">https://github.com/shazow/urllib3/pull/1068#issuecomment-294422348</a><br>
            <br>
            [2] Here's the same API implemented three different ways:<br>
            Using deferreds: <a
              href="https://github.com/pypa/packaging/pull/87"
              rel="noreferrer" target="_blank" moz-do-not-send="true">https://github.com/pypa/packaging/pull/87</a><br>
            "traditional" sans-IO: <a
              href="https://github.com/pypa/packaging/pull/88"
              rel="noreferrer" target="_blank" moz-do-not-send="true">https://github.com/pypa/packaging/pull/88</a><br>
            Using the "effect" library: <a
              href="https://github.com/dstufft/packaging/pull/1"
              rel="noreferrer" target="_blank" moz-do-not-send="true">https://github.com/dstufft/packaging/pull/1</a><br>
            <br>
            --<br>
            Nathaniel J. Smith -- <a href="https://vorpus.org"
              rel="noreferrer" target="_blank" moz-do-not-send="true">https://vorpus.org</a><br>
            _______________________________________________<br>
            Async-sig mailing list<br>
            <a href="mailto:Async-sig@python.org" target="_blank"
              moz-do-not-send="true">Async-sig@python.org</a><br>
            <a href="https://mail.python.org/mailman/listinfo/async-sig"
              rel="noreferrer" target="_blank" moz-do-not-send="true">https://mail.python.org/mailman/listinfo/async-sig</a><br>
            Code of Conduct: <a
              href="https://www.python.org/psf/codeofconduct/"
              rel="noreferrer" target="_blank" moz-do-not-send="true">https://www.python.org/psf/codeofconduct/</a><br>
          </blockquote>
        </div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
Async-sig mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Async-sig@python.org">Async-sig@python.org</a>
<a class="moz-txt-link-freetext" href="https://mail.python.org/mailman/listinfo/async-sig">https://mail.python.org/mailman/listinfo/async-sig</a>
Code of Conduct: <a class="moz-txt-link-freetext" href="https://www.python.org/psf/codeofconduct/">https://www.python.org/psf/codeofconduct/</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>