python kivy事件_为什么不能从Kivy终止这个Python多处理过程?

我正在尝试从Kivy应用程序中运行

django开发服务器.到目前为止,这确实很顺利.

现在我想让用户在服务器运行时继续使用该程序.我的想法是为httpd.serve_forever()创建一个multiprocessing.Process,以避免完全锁定主程序.工作得很好这是我的internal_django模块中的代码:

import multiprocessing

import os

import time

from wsgiref.simple_server import make_server

def django_wsgi_application():

PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))

settings_module = "djangosettings"#%s.djangosettings" % PROJECT_ROOT.split(os.sep)[-1]

os.environ.update({"DJANGO_SETTINGS_MODULE":settings_module})

from django.core.wsgi import get_wsgi_application

application = get_wsgi_application()

return application

class Singleton(type):

_instances = {}

def __call__(cls, *args, **kwargs):

if cls not in cls._instances:

cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)

return cls._instances[cls]

class DjangoServer():

__metaclass__ = Singleton

def start(self):

self.httpd = make_server('', 8000, django_wsgi_application())

self.server = multiprocessing.Process(target=self.httpd.serve_forever)

self.server.start()

print "Now serving on port 8000..."

print "Server Process PID = %s" %self.server.pid

def stop(self):

print("shutdown initiated")

print "Server Process PID = %s" %self.server.pid

while self.server.is_alive():

self.server.terminate()

print("Server should have shut down")

time.sleep(1)

print("Server is_alive: %s" %self.server.is_alive())

self.server.join()

print("server process joined")

if __name__ == "__main__":

server = DjangoServer()

server.start()

time.sleep(3)

server.stop()

当我运行此代码时,一切都按预期工作.这是在控制台中发布的内容:

Now serving on port 8000...

Server Process PID = 1406

shutdown initiated

Server Process PID = 1406

Server should have shut down

Server is_alive: False

server process joined

下一步是提供一种从Kivy应用程序中停止服务器的方法.为此,我只想像以前一样使用我的DjangoServer类:

from internal_django import DjangoServer

class StartScreen(Screen):

def start_server(self):

server = DjangoServer()

server.start()

class StopScreen(Screen):

def stop_server(self):

server = DjangoServer()

server.stop()

但是这样做的过程一旦开始就永远不会退出.我的第一个想法是,单身人士没有按预期工作,我试图退出错误的过程.但正如您在输出中看到的那样,PID是相同的.服务器接收terminate命令,但只是继续工作.这就是控制台的样子:

Now serving on port 8000...

Server Process PID = 1406

shutdown initiated

Server Process PID = 1406

Server should have shut down

Server should have shut down

Server should have shut down

Server should have shut down

Server should have shut down

Server should have shut down

Server should have shut down

Server should have shut down

(and so on, until i manually kill the server process)

我是以完全错误的方式使用多处理吗? Kivy是否以某种方式干扰了这个过程?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值