flask-windows部署
由于supervisor不支持windows,但要防止程序异常中断,所以需要采取措施
通过pywin32,使得flask以服务的方式运行
创建pythonservice.py
import win32serviceutil
import win32service
import win32eventfrom 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
在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部署的更多相关文章
- Visual Studio GitHub For Windows部署
使用GitHub For Windows部署Visual Studio项目 因为最近同时再看很多技术方面的书,书上的例子有很多自己想亲自尝试一下,但是每次写例子都得创建一个新项目未免太麻烦,索性就整理 ...
- flask项目部署到阿里云 ubuntu16.04
title: flask项目部署到阿里云 ubuntu16.04 date: 2018.3.6 项目地址: 我的博客 部署思路参考: Flask Web开发>的个人部署版本,包含学习笔记. 开始 ...
- Flask应用部署
1. 介绍 前面介绍了<Linux下Nginx使用>, 但是Nginx是一个提供静态文件访问的web服务 首先我们介绍一下Web服务器, 应用服务器和应用框架的关系 客户端: 浏览器或者a ...
- Flask (七) 部署
阿里云部署Flask项目 部署Flask项目和部署Django项目基本一致,我们也使用uwsgi+nginx 我们在部署Django项目基础上部署Flask项目 1, 将uwsgi.ini ...
- windows部署服务(WDS)
1.服务器端os:windows server2003R2,windows server 2008,windows server 2008 R2 文件系统:NTFS 必须需要AD架构 网络中需要微软 ...
- 高并发Flask服务部署
高并发Flask服务部署 AI模型持久化 OOP: 利用面向对象思想,实现算法在内存上的实例化及持久化.即一次模型加载,多次请求调用. class ocr_infer_class(threading. ...
- 流媒体 Ubuntu部署srs、windows部署nginx
一.获取项目//码云克隆git clone https://gitee.com/winlinvip/srs.oschina.git srs//githubgit clone https://githu ...
- 一、Windows部署RabbitMQ
RabbitMQ官方网站非常详细,以下只是本人学习过程的整理 一.Windows部署RabbitMQ:https://www.cnblogs.com/yangleiyu/p/15539618.html ...
- Flask + mod_wsgi + Apache on Windows 部署成功(随时接受提问)
前言 说是前言,纯粹就是吐槽. 假设你赶时间.全然能够跳过这部分,我保证不会在这里隐藏不论什么实用的内容. 人上年纪后.可能冲劲不足,我花了大概两周的时间才成功的将flask部署到windows上.还 ...
- Flask的Windows部署:mod_wsgi + Apache
参考1:https://blog.csdn.net/mist99/article/details/80771289 参考2:https://blog.csdn.net/firefox1/article ...
随机推荐
- LG1840 Color the Axis 线段树
菜的人就要写简单题 为了练习手速来写这样一道 珂朵莉树 线段树简单题 没啥可说的,注意修改操作中要判一下 val=0 #include<bits/stdc++.h> using names ...
- Vue 组件通信的多种方式(props、$ref、$emit、$attr、 $listeners)
prop和$ref之间的区别: prop 着重于数据的传递,它并不能调用子组件里的属性和方法.像创建文章组件时,自定义标题和内容这样的使用场景,最适合使用prop. $ref 着重于索引,主要用来调用 ...
- WPF DATAGrid 空白列 后台绑定列 处理
原文:WPF DATAGrid 空白列 后台绑定列 处理 AutoGenerateColumns <DataGrid x:Name="dataGrid" Margin=&qu ...
- sql server 2008清除日志
先改成简单模式,再清除日志,再改回原来模式 USE [oms20190322]GOALTER DATABASE oms20190322 SET RECOVERY SIMPLE WITH NO_WAIT ...
- Python程序中的进程操作-进程池(multiprocess.Pool)
目录 一.进程池 二.概念介绍--multiprocess.Pool 三.参数用法 四.主要方法 五.其他方法(了解) 六.代码实例--multiprocess.Pool 6.1 同步 6.2 异步 ...
- Python程序中的协程操作-greenlet模块
目录 一.安装模块 二.greenlet实现状态切换 三.效率对比 一.安装模块 安装:pip3 install greenlet 二.greenlet实现状态切换 from greenlet imp ...
- 美团技术分享:深度解密美团的分布式ID生成算法
本文来自美团技术团队“照东”的分享,原题<Leaf——美团点评分布式ID生成系统>,收录时有勘误.修订并重新排版,感谢原作者的分享. 1.引言 鉴于IM系统中聊天消息ID生成算法和生成策略 ...
- pytorch_08_RNN
1.循环神经网络的提出是基于记忆模型的想法,期望网络能够记住前面出现的特征,并依据特征推断后面的结果,而且整体的网络结构不断循环,因而得名循环神经网络. 2.循环神经网络的基本结构特别简单,就是将网络 ...
- python 实现自定义切片类
import numbers class Group: #支持切片操作 def __init__(self, group_name, company_name, staffs): self.group ...
- 使用maven快速入门
Maven 基础知识 官网: 传送门 Maven 项目结构 $ MavenProject |-- pom.xml |-- src | |-- main | | `-- java | | `-- res ...