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 12 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
Apr 27 Python
cmd运行python文件时对结果进行保存的方法
May 16 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
Jul 26 Python
python3字符串操作总结
Jul 24 Python
pytorch获取vgg16-feature层输出的例子
Aug 20 Python
python可视化text()函数使用详解
Feb 11 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
Apr 01 Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 Python
python关于倒排列的知识点总结
Oct 13 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
Oct 20 Python
浅谈Python列表嵌套字典转化的问题
Apr 07 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
PHP5 面向对象程序设计
2008/02/13 PHP
ThinkPHP关于session的操作方法汇总
2014/07/18 PHP
php中curl使用指南
2015/02/05 PHP
Nginx下配置codeigniter框架方法
2015/04/07 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
关于图片验证码设计的思考
2007/01/29 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
javascript获取设置div的高度和宽度兼容任何浏览器
2013/09/22 Javascript
JQuery伸缩导航练习示例
2013/11/13 Javascript
JavaScript中switch判断容易犯错的一个细节
2014/08/27 Javascript
jquery实现html页面 div 假分页有原理有代码
2014/09/06 Javascript
《JavaScript DOM 编程艺术》读书笔记之DOM基础
2015/01/09 Javascript
JavaScript获取元素尺寸和大小操作总结
2015/02/27 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
跟我学习javascript创建对象(类)的8种方法
2015/11/20 Javascript
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
简单实现jQuery级联菜单
2017/01/09 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
小程序接口的promise化的实现方法
2019/12/11 Javascript
JS判断浏览器类型与操作系统的方法分析
2020/04/30 Javascript
JavaScript 判断数据类型的4种方法
2020/09/11 Javascript
vue+iview实现文件上传
2020/11/17 Vue.js
Python第三方库的安装方法总结
2016/06/06 Python
Python文件的读写和异常代码示例
2017/10/31 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
python自动从arxiv下载paper的示例代码
2020/12/05 Python
浅谈css3新单位vw、vh、vmin、vmax的使用详解
2017/12/01 HTML / CSS
医学专业大学生求职信
2014/07/12 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
python xlwt模块的使用解析
2021/04/13 Python
最新动漫情报:2022年7月新番定档超过30部, OVERLORD骨王第四季也在其中噢
2022/05/04 日漫
德生TECSUN S-2000使用手册文字版
2022/05/10 无线电