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集合类型用法分析
Apr 08 Python
python opencv之SURF算法示例
Feb 24 Python
Python聊天室程序(基础版)
Apr 01 Python
Python中文件的读取和写入操作
Apr 27 Python
pandas 小数位数 精度的处理方法
Jun 09 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
Oct 21 Python
详解Python locals()的陷阱
Mar 26 Python
Django框架首页和登录页分离操作示例
May 28 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
Mar 03 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
Jan 12 Python
python中os.remove()用法及注意事项
Jan 31 Python
Python万能模板案例之matplotlib绘制甘特图
Apr 13 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+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
2011/12/28 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
php读取和保存base64编码的图片内容
2017/04/22 PHP
Google Suggest ;-) 基于js的动态下拉菜单
2006/10/11 Javascript
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
一款由jquery实现的整屏切换特效
2014/09/15 Javascript
javascript引用类型之时间Date和数组Array
2015/08/27 Javascript
javascript基础语法学习笔记
2016/01/04 Javascript
深入浅析JavaScript面向对象和原型函数
2016/02/06 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
2017/02/13 Javascript
node.js+jQuery实现用户登录注册AJAX交互
2017/04/28 jQuery
vue.js评论发布信息可插入QQ表情功能
2017/08/08 Javascript
用JavaScript做简易的购物车的代码示例
2017/10/20 Javascript
原生javascript实现文件异步上传的实例讲解
2017/10/26 Javascript
node.js将MongoDB数据同步到MySQL的步骤
2017/12/10 Javascript
JS实现select选中option触发事件操作示例
2018/07/13 Javascript
微信小程序如何连接Java后台
2019/08/08 Javascript
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
如何解决日期函数new Date()浏览器兼容性问题
2019/09/11 Javascript
Vue循环遍历选项赋值到对应控件的实现方法
2020/06/22 Javascript
用vite搭建vue3应用的实现方法
2021/02/22 Vue.js
在python中只选取列表中某一纵列的方法
2018/11/28 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
python 实现波浪滤镜特效
2020/12/02 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
2021/02/24 Python
iRobot官网:改变生活的家用机器人品牌
2016/09/20 全球购物
美国户外生活方式品牌:Eddie Bauer
2016/12/28 全球购物
巴西最大的家具及装饰用品店:Mobly
2017/10/11 全球购物
个人批评与自我批评材料
2014/10/17 职场文书
专职安全员岗位职责
2015/04/11 职场文书
第二次离婚起诉书
2015/05/18 职场文书
2016年万圣节活动个人总结
2016/04/05 职场文书
python 常用的异步框架汇总整理
2021/06/18 Python
用php如何解决大文件分片上传问题
2021/07/07 PHP
SpringBoot快速入门详解
2021/07/21 Java/Android
AngularJS实现多级下拉框
2022/03/25 Javascript