Python委托人Command.is_alive无法正常工作吗?

时间:2019-03-27 03:59:15

标签: python

使用delegator.py包(用于Humans的子流程2.0),似乎is_alive返回的Command实例的run()属性无法正常工作(正如我期望的那样)

如果我运行一个需要花费几秒钟才能完成的命令(例如play命令),则在事物运行时,我可以检查is_alive并返回True。目前很好。如果我等待播放声音结束并再次检查,它仍然返回True。相当奇怪,但是我要了解子流程什么。相反,如果我尝试使用kill()停止声音,则声音会按预期停止,但是is_alive仍然为true。

此外,我可以在同一子进程上多次运行kill(),而不会引发异常。在我be_alive之后,期望一个流程(子流程)不kill()错了吗?


在某种程度上,我正在编写一个小型包装器类,该类在非阻塞模式下运行命令,如果suer在上一个命令仍在运行时尝试运行新命令,它将杀死第一个命令并运行新的。

from delegator import run

class ProcRunning:
    '''A delegator subprocess with an extra layer to always run
    non blocking mode and always run only one thing at a time.'''
    def __init__(self):
        self.subprocess = None

    def run_new(self, command):
        #Kill prevoius process, if needed
        if not self.subprocess is None:
            if self.is_alive:
                self.kill()

        self.subprocess = run(command, block=False)

用法示例

p = ProcRunning()
command = create_sound() #returns a string with a command to play a sound for a couple of seconds
p.run_new(command)

注意:对于这种特定用法,我知道is_alive始终为true的事实意味着我可以省略它,但是我想在以后的代码中使用它,我不在这里发布。另外,我对为什么这样不起作用感到好奇。我确定它能按预期工作,只是我不理解它。

0 个答案:

没有答案