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 代码性能优化技巧分享
Aug 07 Python
详解Python网络爬虫功能的基本写法
Jan 28 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
Nov 30 Python
Python 互换字典的键值对实例
Feb 12 Python
python+selenium+PhantomJS抓取网页动态加载内容
Feb 25 Python
Python实现AI换脸功能
Apr 10 Python
Python 日期与时间转换的方法
Aug 01 Python
Python抓包并解析json爬虫的完整实例代码
Nov 03 Python
python中numpy数组与list相互转换实例方法
Jan 29 Python
python 获取计算机的网卡信息
Feb 18 Python
Python学习开发之图形用户界面详解
Aug 23 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简单封装了一些常用JS操作
2007/02/25 PHP
destoon常用的安全设置概述
2014/06/21 PHP
Zend Framework常用校验器详解
2016/12/09 PHP
你所要知道JS(DHTML)中的一些技巧
2007/01/09 Javascript
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
php跨域调用json的例子
2013/11/13 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
二叉树的非递归后序遍历算法实例详解
2014/02/07 Javascript
JavaScript利用构造函数和原型的方式模拟C#类的功能
2014/03/06 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
Node.js的项目构建工具Grunt的安装与配置教程
2016/05/12 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
require简单实现单页应用程序(SPA)
2016/07/12 Javascript
jQuery的ajax下载blob文件
2016/07/21 Javascript
Vue.js使用v-show和v-if的注意事项
2016/12/13 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
2017/07/31 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
2017/09/19 Javascript
解决Layui数据表格的宽高问题
2019/09/28 Javascript
JS函数进阶之继承用法实例分析
2020/01/15 Javascript
Javascript查看大图功能代码实现
2020/05/07 Javascript
Python中将字典转换为XML以及相关的命名空间解析
2015/10/15 Python
python 编程之twisted详解及简单实例
2017/01/28 Python
Python实现识别图片内容的方法分析
2018/07/11 Python
Python绘制并保存指定大小图像的方法
2019/01/10 Python
PyTorch 普通卷积和空洞卷积实例
2020/01/07 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
2020/09/28 Python
解决canvas转base64/jpeg时透明区域变成黑色背景的方法
2016/10/23 HTML / CSS
预备党员转正思想汇报
2014/09/26 职场文书
大学生联谊活动策划书(光棍节)
2014/10/10 职场文书
2015年煤矿工作总结
2015/04/28 职场文书
工作会议简报
2015/07/20 职场文书
公司规章制度范本
2015/08/03 职场文书
教你用Python matplotlib库制作简单的动画
2021/06/11 Python
node快速搭建后台的实现步骤
2022/02/18 NodeJs
css3应用示例:新增的选择器
2022/03/16 HTML / CSS