Python多线程:如何保持守护进程线程的运行

2024-10-01 17:37:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一个棘手的问题来测试守护进程线程是否正在运行。我创建的守护进程线程应该在后台运行以保持服务的运行,因此我执行以下操作来创建它并使其保持活动状态:

创作:

ASThread = threading.Thread(target = initAirserv, args=[],)
ASThread.setDaemon(True)
ASThread.start()

initAirserv()方法中:

^{pr2}$

最后几行的目的是用一种愚蠢的方式使线程保持忙碌。但是,在启动这个守护进程线程并执行了其他操作之后,当我回来检查线程时,如下所示:

if ASThread.is_alive() == 1:
    # do something

如果尸体永远不会被处死。有人能解释一下为什么会这样吗?运行一个执行需要一直忙的线程的最佳方法是什么?非常感谢。在


Tags: 方法truetarget进程args线程threadstart
2条回答

我的一些信息是几个月前的,事情可能已经改变了,所以请接受我。在

如果您使用的是标准的基于C的Python,并且正在编写一个多线程应用程序,那么您需要注意全局解释器锁(GIL)限制。一次只能运行一个线程。如果您愿意使用pythoncinterface包之一并用C编写大量代码,那么函数调用的C部分可以是线程化的,并且不受GIL限制。在

Python具有优秀的多进程支持和库,并且因为您正在同步进程,所以GIL限制不适用。在

有人说要修正GIL限制,但目前这是一个你必须接受的问题。在

IMHO,我选择Python来用Python编写软件,而不是用C编写,除非必须解决一个非常具体的问题。Python对于很多事情来说都是一种优秀的语言,但是GIL限制鼓励我学习一种能够支持更好的事件同步的语言,也就是多线程环境。在

我希望这有帮助。在

发布的代码不符合要求。initAirservas post是类上的一个方法,但传递给Thread构造函数的initAirserv不是。在

如果不知道execAirmon和{}做了什么,以及应用程序中还发生了什么,就很难说出任何具体的东西。在

总的来说,我觉得你说得对。这应该行得通。这并不意味着你的假设是错误的。在

  • 您确定execAirmon返回不等于“removed”的值吗?在
  • 您确定init_Plug返回非false对象吗?在
  • 你确定没有抛出异常吗?(我假设您会注意到一个虚假的stacktrace,那么您的应用程序中是否有其他部分会在不被注意的情况下吞并它们?)在

相关问题 更多 >

    热门问题