由于supervisor不支持windows,但要防止程序异常中断,所以需要采取措施

通过pywin32,使得flask以服务的方式运行

创建pythonservice.py

import win32serviceutil
import win32service
import win32event
from flask import Flask

class win32test(win32serviceutil.ServiceFramework):
_svc_name_ = "Flask Service"
_svc_display_name_ = "Flask Service"
_svc_description_ = "Flask App Service" def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) def SvcDoRun(self):
self.main()
win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE) def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
self.ReportServiceStatus(win32service.SERVICE_STOPPED) def main(self):
        app = Flask(__name__)
app.run(host="0.0.0.0",port=5000) if __name__ == '__main__':
win32serviceutil.HandleCommandLine(win32test)

安装服务:python flaskservice.py install

启动服务:python flaskservice.py start

停止服务:python flaskservice.py stop

删除服务:python flaskservice.py remove

出现的问题即解决过程:

flask不能以debug模式启动,必须关掉debug

问题:服务没有及时响应启动或控制请求

查了下,通过python flaskservice debug的方式,但错误信息是注册表问题,操作了半天的注册表,问题依然存在

之后查到NSSM也可以通过服务的方式运行,但报错信息还是一致,所以原因应该是一样的

通过查看windows日志解决问题

(参考:https://blog.csdn.net/ywg_1994/article/details/82430943)

之后看了下报错信息,提示可以查看windows日志,这下打开了新世界的大门

控制面板-系统和安全-管理工具-查看事件日志,等加载完毕,左侧选择windows日志-应用程序,这时观察右边,里面果然有Flask Service,点击查看错误信息

from jinja2 import escape 未找到模块jinja2

但明明是安装了的

pip show jinja2

显示位置为  c:\users\username\appdata\roaming\python\python36\site-packages

但python解释器明明是在c:\program files\python\python36\lib\site-packages

卸载重装模块,结果还是在用户目录下

有了日志就不怕了,出了问题都可以知道原因,解决即可

 

通过whl手动指定安装位置:

(但pip install --target=c:\program files\python\….. jinja2,显示files\…目录未找到,wtf)

最后通过下载whl文件,将文件放到目标目录,pip install xx.whl完成指定目录的模块安装

之后启动服务提示未找到markupsafe,同样下载whl进行安装

问题:提示服务开启后又被关闭

日志中:The instance's SvcRun() method failed <Error getting traceback - traceback.print_exception() failed %2: %3

(参考:https://stackoverflow.com/questions/52698395/windows-service-with-flask-only-run-in-debug-mode-normal-mode-seem-crash)

在pythonservice.py的最前面添加下面语句:

sys.stdout = sys.stderr = open(os.devnull, 'w')

然后重启服务,果然可以了;(原因不是很清楚,问题应该是无法输出错误信息,解决方案思路应该是给标准输出指定一个设备空文件)

之后在flask服务中设置:程序异常后-重新启动即可

也可以配合pyinstaller使用,更方便

在虚拟环境中也是可以的,操作与之前一样

python的服务主要是依赖于PythonService.exe和所写的服务文件(pythonservice.py)

保证这两个路径即可:

PythonService.exe的路径在服务中就可以查看

服务运行文件可以在服务的注册表中查看:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

如果安装上面直接不可以启动的话,参考:https://stackoverflow.com/questions/34696815/using-pythonservice-exe-to-host-python-service-while-using-virtualenv

其他:

python xxservice.py debug就是坑,最后已经可以启动服务了,执行还是报注册表未找到错误,wtf

中间还尝试了windows-supervisor,结果根本就不行

stackflow很完善,对于这些‘小众’的bug,都有相应的讨论及解决方案,很nice

流程:

python(环境变量配置,安装virtualenvwrapper,workon环境变量配置)

虚拟环境(安装模块的离线包)

安装服务,启动

flask-windows部署的更多相关文章

  1. Visual Studio GitHub For Windows部署

    使用GitHub For Windows部署Visual Studio项目 因为最近同时再看很多技术方面的书,书上的例子有很多自己想亲自尝试一下,但是每次写例子都得创建一个新项目未免太麻烦,索性就整理 ...

  2. flask项目部署到阿里云 ubuntu16.04

    title: flask项目部署到阿里云 ubuntu16.04 date: 2018.3.6 项目地址: 我的博客 部署思路参考: Flask Web开发>的个人部署版本,包含学习笔记. 开始 ...

  3. Flask应用部署

    1. 介绍 前面介绍了<Linux下Nginx使用>, 但是Nginx是一个提供静态文件访问的web服务 首先我们介绍一下Web服务器, 应用服务器和应用框架的关系 客户端: 浏览器或者a ...

  4. Flask (七) 部署

    阿里云部署Flask项目   部署Flask项目和部署Django项目基本一致,我们也使用uwsgi+nginx   我们在部署Django项目基础上部署Flask项目   1, 将uwsgi.ini ...

  5. windows部署服务(WDS)

     1.服务器端os:windows server2003R2,windows server 2008,windows server 2008 R2 文件系统:NTFS 必须需要AD架构 网络中需要微软 ...

  6. 高并发Flask服务部署

    高并发Flask服务部署 AI模型持久化 OOP: 利用面向对象思想,实现算法在内存上的实例化及持久化.即一次模型加载,多次请求调用. class ocr_infer_class(threading. ...

  7. 流媒体 Ubuntu部署srs、windows部署nginx

    一.获取项目//码云克隆git clone https://gitee.com/winlinvip/srs.oschina.git srs//githubgit clone https://githu ...

  8. 一、Windows部署RabbitMQ

    RabbitMQ官方网站非常详细,以下只是本人学习过程的整理 一.Windows部署RabbitMQ:https://www.cnblogs.com/yangleiyu/p/15539618.html ...

  9. Flask + mod_wsgi + Apache on Windows 部署成功(随时接受提问)

    前言 说是前言,纯粹就是吐槽. 假设你赶时间.全然能够跳过这部分,我保证不会在这里隐藏不论什么实用的内容. 人上年纪后.可能冲劲不足,我花了大概两周的时间才成功的将flask部署到windows上.还 ...

  10. Flask的Windows部署:mod_wsgi + Apache

    参考1:https://blog.csdn.net/mist99/article/details/80771289 参考2:https://blog.csdn.net/firefox1/article ...

随机推荐

  1. 趣谈Linux操作系统学习笔记:第二十四讲

    一.小内存的分配基础 1.kmem_cache_alloc_node的作用 通过这段代码可以看出,它调用了kmem_cache_alloc_node函数,在task_struct的缓存区域task_s ...

  2. 机器学习--matplotlib绘制各种图表

    机器学习三剑客:numpy.pandas.matplotlib NumPy系统是Python的一种开源的数值计算扩展.这种工具可用来存储和处理大型矩阵. pandas 是基于numpy的一种工具,该工 ...

  3. Sublime和VSCode生成基础HTML代码

    我们在编写前端页面时,常希望能自动生成基础的HTML代码.而在Sublime和VSCode就有这样的功能 在Sublime中,在编辑栏输入html,然后敲Tab键,则自动生成代码如下: <!DO ...

  4. IT兄弟连 HTML5教程 HTML5的学习线路图 第二、三阶段

    第二阶段编写用户交互功能 通过第一阶段的学习虽说可以完成页面制作,但并不完美,不能算是合格的前端工程师,所以要继续学习如图1.13中的第二阶段内容.现在的Web页面都融入了大量的特效,并且多数需要与用 ...

  5. Django JsonResponse 不自动设置 cookie 的解决方案

    [背景] 目前在做一个前后端分离的 web 项目,后端使用的是 django 框架,所有的 API 都只返回 json :就在这个过程中遇到了一个问题,那就是对于所有的 JsonResponse dj ...

  6. Redis系列---安装redis单机版02

    本章将带领大家一步一步安装Redis单机版(Redis从3.0版本后就开始支持集群了,集群将会后边章节带领大家操作) 准备环境: Centos 6.X redis3.+版本(自行下载,redis 的版 ...

  7. hive 标准hql建表语法格式

    一.标准hql建表语法格式1.官方标准语法:(hql不区分大小写,下面[]里的属性是可选属性) 具体参考官网界面:HIVE官网建表说明文档 CREATE [EXTERNAL] TABLE [IF NO ...

  8. java基础(7):自定义类、ArrayList集合

    1. 引用数据类型(类) 1.1 引用数据类型分类 提到引用数据类型(类),其实我们对它并不陌生,如使用过的Scanner类.Random类. 我们可以把类的类型为两种: 第一种,Java为我们提供好 ...

  9. PLC与外接按钮开关接线方法图解

    一个电机控制电路如图1所示,电路中使用常开按钮启动电机,用常闭按钮停止电机运行,图1中KM是控制电机电源的继电器.这样的电路若是使用PLC时的外接线图如图2所示.同时为使PLC运行,在PLC中输入由图 ...

  10. Dynamics CRM 客户端程序开发:自定义系统标准按钮的可用性

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复125或者20140414可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 一般是新建一个解决方案用于客制化 ...