在线程/进程中启动python瓶,在它旁边启动另一个守护进程

fav*_*tti 1 python multithreading multiprocessing bottle

好的,所以这可能有点不正统,或者我只是愚蠢或两者兼而有之:)

我正在尝试一个非常简单的设置,我在一个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()
Run Code Online (Sandbox Code Playgroud)

除非我完全疯了,否则我希望它们可以同时启动.实际上,会发生的事情是瓶子启动并锁定整个事物.如果我退出瓶子,TFTP守护程序启动.

我也尝试了类似的threading模块方法,结果大致相同.

我究竟做错了什么?

jfs*_*jfs 5

有几个问题:

  • 你打电话run()给主线程.你应该传递参数args:

    Process(target=bottle.run, kwargs=dict(host='0.0.0.0', port=8080))
    
    Run Code Online (Sandbox Code Playgroud)
  • 你调用t.join()来阻塞直到t进程在h.start()之前结束.改为在所有进程启动后加入

  • 瓶子,tftpy可能与多处理模块不兼容.如果是这样,您可以尝试子进程模块