[Twisted-Python] Need advice on changing blocking calls to be Twisted-aware...
andrew-twisted at puzzling.org
Tue May 20 02:26:49 EDT 2003
On Tue, May 20, 2003 at 04:07:43PM +1000, Stuart Hungerford wrote:
> What I'm effectively doing in the render() call is:
> def render(...)
> ...generate some HTML
> do blocking system call
> ...generate some more HTML
> Which I understand is a no-no in the reactor and callback
> based Twisted framework. I believe that the Twisted way to do
> this is with a reactor.spawnProcess() call which in turn
> returns a Deferred object. Or maybe I should be using
> threads instead?
Threads are unnecessary here.
> Can someone point me to some example code where a
> blocking-system-call-and-it's-results-needed-here pattern
> is expressed in the spawnProcess/Deferred/callback world
> of Twisted?
Use twisted.internet.utils.getProcessOutput, which returns a Deferred.
Your code should something like:
d = getProcessOutput('random program')
def renderProcessOutput(self, output, request):
def renderError(self, failure, request):
def finishPage(self, _, request):
This is obviously very rough, but hopefully it gives you the right idea.
More information about the Twisted-Python