Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检测守护进程线程中的解释器关闭_Python_Multithreading - Fatal编程技术网

Python 检测守护进程线程中的解释器关闭

Python 检测守护进程线程中的解释器关闭,python,multithreading,Python,Multithreading,我们遇到了以下错误: 守护进程线程在解释器关闭期间出错 现在我寻找一种方法来编码这个bug 目前代码如下所示: while True: do_something() time.sleep(interval) 在做某事()之前,有没有办法检查解释器是否仍然可用 或者最好不要执行mythread.setDaemon(True)并检查主线程是否已退出?这是来自threading.py模块的代码: import sys as _sys class Thread(_Verbose):

我们遇到了以下错误:

守护进程线程在解释器关闭期间出错

现在我寻找一种方法来编码这个bug

目前代码如下所示:

while True:
    do_something()
    time.sleep(interval)
在做某事()之前,有没有办法检查解释器是否仍然可用


或者最好不要执行mythread.setDaemon(True)并检查主线程是否已退出?

这是来自threading.py模块的代码:

import sys as _sys

class Thread(_Verbose):
    def _bootstrap_inner(self):
        # some code

            # If sys.stderr is no more (most likely from interpreter
            # shutdown) use self._stderr.  Otherwise still use sys (as in
            # _sys) in case sys.stderr was redefined since the creation of
            # self.
            if _sys:
               _sys.stderr.write("Exception in thread %s:\n%s\n" % 
                   (self.name, _format_exc()))
            else:
               # some code
可能会有帮助。您看到的错误来自
else
语句。因此,在你的情况下:

import sys as _sys

while True:
    if not _sys:
        break/return/die/whatever
    do_something()
    time.sleep(interval)
但我不确定它是否有效(请注意,解释器关闭可能发生在
dou\u something
内部,因此您可能应该使用
try:except:
包装所有内容)


守护进程线程不一定是坏的,它们肯定可以加快开发过程。你只需要小心处理它们。

回答自己的问题:

我现在使用这个模式:不设置守护进程(True),不使用sleep(),使用parent_thread.join()


相关:相关:我不明白。如果子线程不是守护进程,那么父线程永远不会死(在子线程之前),因此父线程上的
处于活动状态
将始终为真。也就是说,这整张支票是毫无意义的。如果子线程是守护进程,它可能会工作。@奇怪的是,如果父线程(主线程)已到达其末端,is_alive()将返回False,但子线程仍处于活动状态。“它在我的测试中有效。”guettli Hi,这里有类似的问题。请您解释一下如何在模块级获得
parent\u-thread
?@Korem I store
parent\u-thread
。在我的例子中,整个进程/解释器只有一个父线程。我看到了一个类似的问题,我的诅咒屏幕界面是一个线程,其他的都是主线程。退出是由子线程启动的(按“q”)-这给了我linux上的segfault-将尝试此解决方案-感谢您的发布!
while True:
    parent_thread.join(interval)
    if not parent_thread.is_alive():
        break
    do_something()