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实现将元祖转换成数组的方法
May 04 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
May 24 Python
python 实现一次性在文件中写入多行的方法
Jan 28 Python
pandas中的series数据类型详解
Jul 06 Python
python实现批量nii文件转换为png图像
Jul 18 Python
Python 获取指定文件夹下的目录和文件的实现
Aug 30 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
Oct 21 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
Jun 17 Python
Python自动化xpath实现自动抢票抢货
Sep 19 Python
selenium自动化测试入门实战
Dec 21 Python
python中使用asyncio实现异步IO实例分析
Feb 26 Python
解决Pytorch dataloader时报错每个tensor维度不一样的问题
May 28 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
从网上搜到的phpwind 0day的代码
2006/12/07 PHP
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
2011/07/28 PHP
php的array数组和使用实例简明教程(容易理解)
2014/03/20 PHP
php实现异步数据调用的方法
2015/12/24 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
2019/04/10 PHP
jQuery 表单验证扩展(四)
2010/10/20 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
2013/12/24 Javascript
node.js中的buffer.write方法使用说明
2014/12/10 Javascript
js实现文字垂直滚动和鼠标悬停效果
2015/12/31 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
javascript设置文本框光标的方法实例小结
2016/11/04 Javascript
JavaScript模拟实现封装的三种方式及写法区别
2017/10/27 Javascript
浅谈Vue SPA 首屏加载优化实践
2017/12/15 Javascript
利用Blob进行文件上传的完整步骤
2018/08/02 Javascript
javascript中UMD规范的代码推演
2018/08/29 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
pandas将DataFrame的列变成行索引的方法
2018/04/10 Python
django orm 通过related_name反向查询的方法
2018/12/15 Python
Python循环结构的应用场景详解
2019/07/11 Python
关于python scrapy中添加cookie踩坑记录
2020/11/17 Python
基于CSS3 animation动画属性实现轮播图效果
2017/09/12 HTML / CSS
美国香薰蜡烛品牌:PADDYWAX
2018/10/06 全球购物
opencv实现图像平移效果
2021/03/24 Python
工程造价与财务管理专业应届生求职信
2013/10/06 职场文书
《母鸡》教学反思
2014/02/25 职场文书
党员承诺书内容
2014/03/26 职场文书
优秀学生评语大全
2014/04/25 职场文书
大班上学期幼儿评语
2014/04/30 职场文书
2014党支部对照检查材料思想汇报
2014/10/05 职场文书
校园运动会广播稿
2014/10/06 职场文书
个人授权委托书范本格式
2014/10/12 职场文书
浅谈Python项目的服务器部署
2021/04/25 Python
如何用JavaScript学习算法复杂度
2021/04/30 Javascript
详细了解java监听器和过滤器
2021/07/09 Java/Android
ubuntu如何搭建vsftpd服务器
2022/12/24 Servers