multiprocessing callbacks?

Pete Hunt floydophone at gmail.com
Mon Dec 14 19:37:37 EST 2009


Hey, everyone -

I'm trying to use multiprocessing to create a process pool similar to
multiprocessing.Pool, except that it works across multiple hosts. For
various reasons, I would like the result of async_apply() to return a
Twisted Deferred object.

My first attempt at the implementation is:

class DeferredProxy(managers.BaseProxy):
    _exposed_ = ("callback","errback","addCallback","addErrback")
    def callback(self, v):
        return self._callmethod("callback",(v,))

    def errback(self, v):
        return self._callmethod("errback",(v,))

    def addCallback(self, cb):
        return self._callmethod("addCallback",(cb,))

    def addErrback(self, eb):
        return self.__callmethod("adderrback",(eb,))

class DispatchManager(managers.BaseManager):
    pass
DispatchManager.register("Deferred", defer.Deferred, DeferredProxy)

This, however, fails, because "cb" and "eb" cannot be pickled. I don't
actually need to pickle them, though, because I want them to run on
the machine on which they were created. Is there a way, in
multiprocessing, that I can pass some sort of "callback" around that
serves as a proxy to a remote function?

Thanks in advance,

Pete



More information about the Python-list mailing list