【问题标题】:Starting python bottle in a thread/Process and another daemon next to it在线程/进程中启动 python 瓶和旁边的另一个守护进程
【发布时间】:2012-10-12 20:56:34
【问题描述】:

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

我正在尝试一个非常简单的设置,我在一个 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 模块尝试了类似的方法,结果大致相同。

我做错了什么?

【问题讨论】:

    标签: python multithreading multiprocessing bottle


    【解决方案1】:

    好吧,我不确定我是否理解你想要完成的事情,但如果我在你的位置,我会尝试使用python-daemon package

    我认为bottleTFTP 都可以被守护。 由于您只是在寻找一个简单的测试,我想 python-daemon 网页中给出的示例就足够了。

    如果您真的喜欢将事物进行守护进程的想法,我还建议您搜索适合您平台的守护进程方法,因为这样您就有多种设施来管理您的守护进程,使它们与在你的操作系统。

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

    【讨论】:

    • 如果我不清楚,请原谅我。我确实会守护进程。但不是这两个过程。我正在编写自己的工具,该工具将嵌入瓶子和 TFTP 以及 那个 工具,我确实会使用python-daemon 进行守护进程。我只是在寻找一种解决方案,在我自己的守护进程中将这两个作为单独的线程/子进程运行。
    • 我应该删除这个答案,因为它不会增加任何问题吗?
    • 随意离开它 :) 它可能会添加更多关于 python 守护进程的信息。
    【解决方案2】:

    有几个问题:

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

      Process(target=bottle.run, kwargs=dict(host='0.0.0.0', port=8080))
      
    • 您调用 t.join(),它会阻塞直到 t 进程在 h.start() 之前结束。改为在所有进程启动后加入

    • bottle、tftpy 可能与多处理模块不兼容。如果是这样,您可以尝试 subprocess 模块

    【讨论】:

    • 在主线程上调用run 是问题所在。谢谢伙计,你让我看到了一些我刚刚忽略的非常明显的东西! :)
    • 附带说明:bottle 和 tftp 都受 IO 限制,而不是 CPU 限制。线程应该足够了,不需要产生额外的进程。
    • @defnull:如果没有线程的合作,线程更难被杀死,它们不会正确释放资源。
    猜你喜欢
    • 2018-04-08
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    相关资源
    最近更新 更多