2.在启动类里引入模块
from gevent import pywsgi
3.main方法里将app.run替换
server = pywsgi.WSGIServer((‘0.0.0.0’, 80), app)
server.serve_forever()
复制代码
二、uWSGI实现方式以前需要引入nginx,现在也不需要了,很简单的实现,如下
1.安装uWSGI模块
pip install uwsgi
复制代码
2.在根目录下创建uWSGI配置文件 【uwsgi.ini】
[uwsgi]
地址端口
http = 0.0.0.0:80
项目路径
chdir = /root/projectname
项目启动文件
wsgi-file = manage.py
项目需要调用的启动类
callable = app
进程线程设置
processes = 4
threads = 10
日志文件
daemonize = /app/logs/uwsgi.log
保存主进程pid文件
pidfile = uwsgi.pid
是否需要主进程
master = true
复制代码
3.相关指令
#启动
uwsgi --ini uwsgi.ini
#重新加载
uwsgi --reload uwsgi.pid
#停止
uwsgi --stop uwsgi.pid
复制代码
4.附代码
manage.py
coding:utf-8
from app import create_app
app = create_app()
if name == ‘main’:
app.run(host=“0.0.0.0”, port=80)
复制代码
app/__init__.py
coding:utf-8
import os
import sys
from apscheduler.schedulers.background import BackgroundScheduler
from flask import Flask as _Flask, request, jsonify
from flask_apscheduler import APScheduler
from app.extensions import *
from app import config
from app.api import api
import fcntl
import atexit
class Flask(_Flask):
def wsgi_app(self, environ, start_response):
ctx = self.request_context(environ)
ctx.push()
error = None
try:
try:
response = self.full_dispatch_request()
except Exception as e:
error = e
response = self.handle_exception(e)
except:
error = sys.exc_info()[1]
raise
return response(environ, start_response)
finally:
if self.should_ignore_error(error):
error = None
ctx.auto_pop(error)
def create_app():
app = Flask(name, static_folder=os.path.join(os.path.dirname(os.path.abspath(file)), ‘…’, ‘static’))
app.config.from_object(config)
blueprints_fabric(app)
run_task(app)
extensions_fabric(app)
process_request(app)
app.json_encoder = CustomJSONEncoder
return app
class CustomJSONEncoder(JSONEncoder):
def default(self, obj):
if isinstance(obj, bytearray):
return str(obj, encoding=‘utf-8’)
if isinstance(obj, datetime):
return obj.strftime(‘%Y-%m-%dT%H:%M:%S’)
else:
return JSONEncoder.default(self, obj)
def job1():
print(“job1”)
def run_task(app):
执行一次
“”“Configure Scheduler”“”
f = open(“scheduler.lock”, “wb”)
try:
fcntl.flock(f, fcntl.LOCK_EX | fcntl.LOCK_NB)
print(“run_task**”)
scheduler = APScheduler(scheduler=BackgroundScheduler(timezone=‘Asia/Shanghai’))
scheduler.init_app(app)
scheduler.start()
@scheduler.task(‘interval’, id=‘do_job_1’, seconds=10, misfire_grace_time=900)
def do_job_1():
job1()
except:
pass
def unlock():
fcntl.flock(f, fcntl.LOCK_UN)
f.close()
atexit.register(unlock)
def blueprints_fabric(app):
blueprints = [api]
for blueprint in blueprints:
app.register_blueprint(blueprint)