python多进程重复加载的解决方式


Posted in Python onDecember 13, 2019

flask多进程会引起重复加载,

解决方法:把耗资源的加载挪到函数里面或者类里面,就不会重复加载资源了。

测试发现,不是flask引起的,是多进程会引起重复加载python文件。

把flask注释掉,也会重复加载。

# autotrade/__init__.py
# __init__.py 定义全局的app路由
# 然后将其他模块由app装饰后的函数导入,flask即可识别所有的请求入口
import time
 
from flask import Flask
from multiprocessing import Process
 
# 配置全局app
 
# 导入index中定义的所有函数
# from autotrade.server.index import *
print("import will repeat")
def run_index():
  print("run_index once")
  app = Flask(__name__)
  # 启动web服务器,使用多线程方式,接收所有http请求
  app.run(host='0.0.0.0', port=5000, threaded=True,debug=False)
 
def run_orders():
  # 启动查询交易程序
  while True:
    print('执行相应的交易程序')
    time.sleep(3)
 
def main():
  # 主程序
  # 创建子进程
  jobs = []
  jobs.append(Process(target=run_index))
  # jobs.append(Process(target=run_orders))
  # 启动子进程
  for job in jobs:
    job.start()
 
  # 等待子进程结束返回
  for job in jobs:
    job.join()
 
if __name__ == '__main__':
  # run_index()
  main()

一般情况,把需要加载的封装到函数或者类中就可以了,

但是有一个例外:就是SQLAlchemy

必须在py文件中实例化,

from flask_login import LoginManager
from flask_mail import Mail
from flask_socketio import SocketIO
from flask_migrate import Migrate
from flask_rq2 import RQ
from flask_wtf.csrf import CSRFProtect

from monitor.common.storage import LocalStorage, QiniuStorage, ObjectStorage
import config.global_var as gl_var
# from monitor.common.es_search import ESearchEngine

QINIU_AVAILABLE = gl_var.get_value("qiniu_available")
OSS_AVAILABLE = gl_var.get_value("oss_available")
REDIS_URI = gl_var.get_value("redis_uri")
BASEDIR = gl_var.get_value("basedir")
sbdwl = gl_var.get_value("sbdwl")


class Redis(object):

  def __init__(self):
    self._db = None

  def init_app(self, uri=REDIS_URI):
    self._db = _redis.Redis.from_url(uri)

  @property
  def db(self):
    return self._db

print("import foundation")

import threading
class Singleton(object):
  _instance_lock=threading.Lock()
  def __init__(self):
    pass
    # import time
    # print("sleep")
    # time.sleep(1)
  def __new__(cls, *args, **kwargs):
    if not hasattr(Singleton,"_instance"):
      with Singleton._instance_lock:
        if not hasattr(Singleton,"_instance"):
          print("create _instance----------------------------")
          Singleton._instance=object.__new__(cls,*args,**kwargs)

          app = Flask(__name__)
          Singleton._instance.db = SQLAlchemy(app)
          Singleton._instance.login_manager = LoginManager()

解决方法:把启动换到一个新文件,然后在函数中调用这个文件,import也放在函数内部。

以上这篇python多进程重复加载的解决方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python各种语言间时间的转化实现代码
Mar 23 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
Nov 08 Python
机器学习的框架偏向于Python的13个原因
Dec 07 Python
python实现xlsx文件分析详解
Jan 02 Python
Python 12306抢火车票脚本
Feb 07 Python
python opencv3实现人脸识别(windows)
May 25 Python
Python3 解决读取中文文件txt编码的问题
Dec 20 Python
python中如何使用insert函数
Jan 09 Python
基于pytorch padding=SAME的解决方式
Feb 18 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
Feb 28 Python
Python3.7 读取音频根据文件名生成脚本的代码
Apr 07 Python
Numpy一维线性插值函数的用法
Apr 22 Python
使用pyqt5 tablewidget 单元格设置正则表达式
Dec 13 #Python
Python代码块及缓存机制原理详解
Dec 13 #Python
Python3和pyqt5实现控件数据动态显示方式
Dec 13 #Python
python实现简单日志记录库glog的使用
Dec 13 #Python
利用matplotlib实现根据实时数据动态更新图形
Dec 13 #Python
Python3将jpg转为pdf文件的方法示例
Dec 13 #Python
如何使用python3获取当前路径及os.path.dirname的使用
Dec 13 #Python
You might like
《PHP边学边教》(02.Apache+PHP环境配置――上篇)
2006/12/13 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
2016/04/04 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
PHP钩子实现方法解析
2019/05/21 PHP
laravel框架模型和数据库基础操作实例详解
2020/01/25 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
2020/03/02 PHP
简单通用的JS滑动门代码
2008/12/19 Javascript
extjs 为某个事件设置拦截器
2010/01/15 Javascript
今天是星期几的4种JS代码写法
2013/09/17 Javascript
不得不分享的JavaScript常用方法函数集(下)
2015/12/25 Javascript
详解maxlength属性在textarea里奇怪的表现
2015/12/27 Javascript
几种二级联动案例(jQuery\Array\Ajax php)
2016/08/13 Javascript
js中动态创建json,动态为json添加属性、属性值的实例
2016/12/02 Javascript
Jquery Easyui菜单组件Menu使用详解(15)
2016/12/18 Javascript
通过jquery toggleClass()属性制作文章段落更改背景颜色
2018/05/21 jQuery
JS合并两个数组的3种方法详解
2019/10/24 Javascript
vue中js判断长时间不操作界面自动退出登录(推荐)
2020/01/22 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
React Ant Design树形表格的复杂增删改操作
2020/11/02 Javascript
vue实现防抖的实例代码
2021/01/11 Vue.js
[59:08]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第一局
2016/02/27 DOTA
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
Python 之 Json序列化嵌套类方式
2020/02/27 Python
python中if及if-else如何使用
2020/06/02 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
HTML5 FormData 方法介绍以及实现文件上传示例
2017/09/12 HTML / CSS
利用纯html5绘制出来的一款非常漂亮的时钟
2015/01/04 HTML / CSS
Swanson中国官网:美国斯旺森健康产品公司
2021/03/01 全球购物
公务员职业生涯规划书范文  
2014/01/19 职场文书
离职证明标准格式
2014/09/15 职场文书
党的作风建设心得体会
2014/10/22 职场文书
2014年班组建设工作总结
2014/12/01 职场文书
2016企业先进集体事迹材料
2016/02/25 职场文书
详解TypeScript的基础类型
2022/02/18 Javascript
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server