好了,所以这可能是一个有点非正统或者我只是愚蠢或两者:)开始蟒蛇瓶在一个线程/进程和另一个守护旁边
我想一个很简单的设置,其中我在一个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
模块,大约有相同的结果。
我在做什么错?
调用'在主线程run'是问题。谢谢你,你睁开了眼睛,看到我刚刚俯视的一些非常明显的东西! :) – favoretti
附注:both和tftp都是IO绑定的,而不是CPU绑定的。线程应该足够了,不需要产生额外的进程。 – defnull
@defnull:如果没有他们的合作,线程很难被杀死,他们不会正确释放资源。 – jfs