当前位置:  开发笔记 > 编程语言 > 正文

使用twisted的反应器进行Python多处理

如何解决《使用twisted的反应器进行Python多处理》经验,为你挑选了1个好方法。

我正在开发一个xmlrpc服务器,它必须周期性地执行某些任务.我使用twisted作为xmlrpc服务的核心,但我遇到了一个小问题:

class cemeteryRPC(xmlrpc.XMLRPC):

    def __init__(self, dic):
        xmlrpc.XMLRPC.__init__(self)


    def xmlrpc_foo(self):
        return 1


    def cycle(self):
        print "Hello"
        time.sleep(3)


class cemeteryM( base ):

    def __init__(self, dic):   # dic is for cemetery
        multiprocessing.Process.__init__(self)
        self.cemRPC = cemeteryRPC()


    def run(self):
        # Start reactor on a second process
        reactor.listenTCP( c.PORT_XMLRPC, server.Site( self.cemRPC ) )
        p = multiprocessing.Process( target=reactor.run )
        p.start()

        while not self.exit.is_set():
            self.cemRPC.cycle()
            #p.join()


if __name__ == "__main__":

    import errno
    test = cemeteryM()
    test.start()

    # trying new method
    notintr = False
    while not notintr:
        try:
            test.join()
            notintr = True 
        except OSError, ose:
            if ose.errno != errno.EINTR:
                raise ose
        except KeyboardInterrupt:
            notintr = True

我应该如何加入这两个过程,以便它们各自的连接不会阻塞?

(我对"加入"非常困惑.为什么它会阻止我用谷歌搜索但是找不到很多有用的解释加入的用法.有人能解释一下吗?)

问候



1> Jon Mills..:

你真的需要在一个单独的进程中运行Twisted吗?这看起来很不寻常.

试着把Twisted的Reactor想象成你的主循环 - 并挂掉你需要的一切 - 而不是试图将Twisted作为后台任务运行.

执行此类操作的更常规方法是使用Twisted的.callLater或将LoopingCall对象添加到Reactor.

例如

from twisted.web import xmlrpc, server
from twisted.internet import task
from twisted.internet import reactor

class Example(xmlrpc.XMLRPC):          
    def xmlrpc_add(self, a, b):
        return a + b

    def timer_event(self):
        print "one second"

r = Example()
m = task.LoopingCall(r.timer_event)
m.start(1.0)

reactor.listenTCP(7080, server.Site(r))
reactor.run()

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有