Python Can';t终止子进程

Python Can';t终止子进程,python,subprocess,python-multiprocessing,Python,Subprocess,Python Multiprocessing,我有以下代码: class Server(object): servers = [] def __init__(self, name, host, port, process): self.name = name.lower() self.host, self.port = host, port self.process = process self.pid = self.process.pid @sta

我有以下代码:

class Server(object):
    servers = []

    def __init__(self, name, host, port, process):
        self.name = name.lower()
        self.host, self.port = host, port
        self.process = process
        self.pid = self.process.pid

    @staticmethod
    def register(server):
        Server.servers.append(server)

    @staticmethod
    def unregister(server):
         Server.servers.remove(server)

def start_waitress(host='0.0.0.0', port=8080):
     args = ['--port={}'.format(port),
         '--host={}'.format(host), 'yarr.wsgi:application']

    subprocess.call(['waitress-serve'] + args)

 ...

 host, port = '0.0.0.0', 8080
 process = multiprocessing.Process(target=start_waitress)
 process.start()
 Server.register(Server('waitress', host, port, process))

 ...

for server in Server.servers:
   if server.name == 'waitress':
       server.process.terminate() # Here's the problem
       Server.unregister(server)
       break
问题是我无法在启动进程后终止它

我可以终止进程的唯一方法是运行
kill


我该如何终止这个过程呢?

正如J.F.塞巴斯蒂安所说,
女服务员的服务
使自己神化

我无法用
多处理
解决这个问题,但我用
子流程
找到了一个解决方案

我正在调用
subprocess.Popen(cmd)
,而不是创建
multiprocessing.Process


waiterserve
可能会对自身进行后台监控(父进程已退出,无需终止)。使用
waiterserve
提供的关闭其守护进程的方法。@J.F.Sebastian有办法检查它吗?您可以看到
server.pid
process.start()之后几乎没有立即运行。
class Server(object):
    servers = []

    def __init__(self, name, host, port, pipe):
        self.name = name.lower()
        self.host, self.port = host, port
        self.pipe = pipe

    @staticmethod
    def register(server):
        Server.servers.append(server)

    @staticmethod
    def unregister(server):
        Server.servers.remove(server)

def start_waitress(host='0.0.0.0', port=8080):
    args = ['--port={}'.format(port),
         '--host={}'.format(host), 'yarr.wsgi:application']

    return subprocess.Popen(['waitress-serve'] + args)

...

host, port = '0.0.0.0', 8080
Server.register(Server('waitress', host, port, start_waitress()))

...

for server in Server.servers:
  if server.name == 'waitress':
      server.pipe.terminate()
      server.pipe.wait()
      Server.unregister(server)
      break