LWP(3pm) | User Contributed Perl Documentation | LWP(3pm) |
Coro::LWP - make LWP non-blocking - as much as possible
use Coro::LWP; # afterwards LWP should not block
Over the years, a number of less-invasive alternatives have popped up, which you might find more acceptable than this rather invasive and fragile module. All of them only support HTTP (and sometimes HTTPS).
Lets you use the LWP API normally.
This module is an AnyEvent user, you need to make sure that you use and run a supported event loop.
This module tries to make LWP non-blocking with respect to other coroutines as much as possible, and with whatever means it takes.
LWP really tries very hard to be blocking (and relies on a lot of undocumented functionality in IO::Socket), so this module had to be very invasive and must be loaded very early to take the proper effect.
Note that the module AnyEvent::HTTP might offer an alternative to the full LWP that is designed to be non-blocking.
Here is what it currently does (future versions of LWP might require different tricks):
Impact: everybody else uses this (slower) version of select, too. It should be quite compatible to perls builtin select, though.
Impact: some code might not expect coroutine semantics, for example, when you fork you might prefer the blocking variant because other coroutines shouldn't actually run.
Impact: Coro::Socket is not at all compatible to IO::Socket::INET. While it duplicates some undocumented functionality required by LWP, it does not have all the methods of IO::Socket::INET and might act quite differently in practise. Also, protocols other than the above mentioned will still block, at least some of the time.
All this likely makes other libraries than just LWP not block, but that's just a side effect you cannot rely on.
Increases parallelism is not supported by all libraries, some might cache data globally.
Marc A. Lehmann <schmorp@schmorp.de> http://software.schmorp.de/pkg/Coro.html
2022-10-20 | perl v5.36.0 |