开始蟒蛇瓶在一个线程/进程和另一个守护在它旁边(Starting python bottle in

2019-08-01 19:10发布

好了,这可能是一个有点非正统或者我只是愚蠢或两者:)

我想一个很简单的设置,我开始在一个瓶子服务器Process实例,并开始在另一个实例中一个很小的TFTP服务器。

#!/usr/bin/env python
import bottle
import sys
import tftpy
from multiprocessing import Process

def main():
    try:
        t = Process(target=bottle.run(host='0.0.0.0', port=8080))
        t.daemon = True
        t.start()
        t.join()
        h = Process(target=tftpy.TftpServer('/srv/tftp').listen('0.0.0.0', 69))
        h.start()
        h.join()

    except KeyboardInterrupt:
        sys.stdout.write("Aborted by user.\n")
        sys.exit(1)

if __name__ == "__main__":
    main()

除非我完全疯了,我希望他们在平行启动。 在现实中,什么情况是,瓶子开始和锁整个事情了。 如果我退出瓶,TFTP守护进程启动。

我也试过用类似的方法threading模块,大约有相同的结果。

我究竟做错了什么?

Answer 1:

有几个问题:

  • 调用run()在主线程。 你应该传递参数在args来代替:

     Process(target=bottle.run, kwargs=dict(host='0.0.0.0', port=8080)) 
  • 你叫t.join(),该块到t流程h.start()之前结束。 加入后的所有进程,而不是启动

  • 瓶,tftpy可能与多处理模块兼容。 你可以尝试子模块,如果是这样


Answer 2:

好吧,我不知道如果我理解你正在试图完成的任务,但如果我是你,我会尝试使用蟒蛇守护包

我认为,这两个bottleTFTP可以进程化。 当你只在寻找一个简单的测试,我想这在蟒蛇守护网页给出的例子就足够了。

如果你真的很喜欢去daemonizing事物的想法,我也建议你搜索一下你的平台,这样你有一些设施,使它们更相似于您的操作系统上发现的管理你的守护适当daemonizing方法。

对于一些简单的例子: http://troydhanson.wordpress.com/2012/08/21/minimal-sysvinit-launchd-and-upstart/



文章来源: Starting python bottle in a thread/Process and another daemon next to it