On Fri, Jun 9, 2017 at 3:05 AM Alex Grönholm <alex.gronh...@nextday.fi>
wrote:

> Yarko Tymciurak kirjoitti 09.06.2017 klo 09:19:
>
>
> On Fri, Jun 9, 2017 at 12:48 AM Nathaniel Smith <n...@pobox.com> wrote:
>
>> On Thu, Jun 8, 2017 at 3:32 PM, manuel miranda <manu.miran...@gmail.com>
>> wrote:
>> > Hello everyone,
>> >
>> > After using asyncio for a while, I'm struggling to find information
>> about
>> > how to support both synchronous and asynchronous use cases for the same
>> > library.
>> >
>> > I.e. imagine you have a package for http requests and you want to give
>> the
>> > user the choice to use a synchronous or an asynchronous interface.
>> Right now
>> > the approach the community is following is creating separate libraries
>> one
>> > for each version. This is far from ideal for several reasons, some I can
>> > think of:
>> >
>> > - Code duplication, most of the functionality is the same in both
>> libraries,
>> > only difference is the sync/async behaviors
>> > - Some new async libraries lack functionality compared to their sync
>> > siblings. Others will introduce bugs that the sync version already
>> solved
>> > long ago, etc.
>> > - Different interfaces for the user for the same exact functionality.
>> >
>> > In summary, in some cases it looks like reinventing the wheel. So now
>> comes
>> > the question, is there any documentation, guide on what would be best
>> > practice supporting this kind of duality?
>>
>> I would say that this is something that we as a community are still
>> figuring out. I really like the Sans-IO approach, and it's a really
>> valuable piece of the solution, but it doesn't solve the whole problem
>> by itself - you still need to actually do I/O, and this means things
>> like error handling and timeouts that aren't obviously a natural fit
>> to the Sans-IO approach, and this means you may still have some tricky
>> code that can end up duplicated. (Or maybe the Sans-IO approach can be
>> extended to handle these things too?) There are active discussions
>> happening in projects like urllib3 [1] and packaging [2] about what
>> the best strategy to take is. And the options vary a lot depending on
>> whether you need to support python 2 etc.
>>
>> If you figure out a good approach I think everyone would be interested
>> to hear it :-)
>>
>
> 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.
>
> Python 4 will be nothing more than the next minor release after 3.9.
> Because Guido hates double digit minor versions :)
>
> 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.
>
> 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.
>

actually I was bot thinking of that...  but I was thinking of processing in
the language, rather than a library...

In any case, I don't have answers, only a vision which keeps coming up.  My
interest is not in providing "a solution", rather generating a reasoned
discussion...



>
> 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...
>
> -y
>
>
>
>> -n
>>
>> [1] https://github.com/shazow/urllib3/pull/1068#issuecomment-294422348
>>
>> [2] Here's the same API implemented three different ways:
>> Using deferreds: https://github.com/pypa/packaging/pull/87
>> "traditional" sans-IO: https://github.com/pypa/packaging/pull/88
>> Using the "effect" library: https://github.com/dstufft/packaging/pull/1
>>
>> --
>> Nathaniel J. Smith -- https://vorpus.org
>> _______________________________________________
>> Async-sig mailing list
>> Async-sig@python.org
>> https://mail.python.org/mailman/listinfo/async-sig
>> Code of Conduct: https://www.python.org/psf/codeofconduct/
>>
>
>
> _______________________________________________
> Async-sig mailing 
> listAsync-sig@python.orghttps://mail.python.org/mailman/listinfo/async-sig
> Code of Conduct: https://www.python.org/psf/codeofconduct/
>
>
> _______________________________________________
> Async-sig mailing list
> Async-sig@python.org
> https://mail.python.org/mailman/listinfo/async-sig
> Code of Conduct: https://www.python.org/psf/codeofconduct/
>
_______________________________________________
Async-sig mailing list
Async-sig@python.org
https://mail.python.org/mailman/listinfo/async-sig
Code of Conduct: https://www.python.org/psf/codeofconduct/

Reply via email to