Hello,
I have an optimization question in the realm of "before I do something
foolish..." regarding the contextFactory passed to twisted.web.client.Agent.
Background:
I have (several) twisted applications running on a Cortex-A5 system, one of
which interfaces with a web service using the twisted.web.client.Agent
API*. The
problem I've observed is that requests to this web service result in a higher
than desired CPU load. To understand the source of the load I isolated the
server interactions and profiled.
Investigation:
The profile data revealed the load in question stemmed from TLS related
calls, specifically optionsForClientTLS, which is called once per connection.
In looking (briefly) at what optionsForClientTLS does, it seemed
(perhaps wrongly)
that there was an opportunity for optimization in my specific case.
The optimization is to create a custom contextFactory that caches the connection
creator since the host is not changing. I prototyped an implementation and the
load was reduced by a factor of ten.
Question:
Is it safe/sane to reuse a connection creator if the host to which I'm
connecting is
not going to change?
Thanks,
-Jason Litzinger
* Technically this code is inside an open source third party SDK, but were I in
their shoes I'd write it the same way, so I've no issues with their
implementation.