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 相关文章推荐
python3图片转换二进制存入mysql
Dec 06 Python
Python中的一些陷阱与技巧小结
Jul 10 Python
Python基于有道实现英汉字典功能
Jul 25 Python
python遍历目录的方法小结
Apr 28 Python
python用post访问restful服务接口的方法
Dec 07 Python
Python寻找路径和查找文件路径的示例
Jul 10 Python
python 定时器每天就执行一次的实现代码
Aug 14 Python
python中count函数简单用法
Jan 05 Python
python实现飞机大战项目
Mar 11 Python
Python填充任意颜色,不同算法时间差异分析说明
May 16 Python
Python机器学习工具scikit-learn的使用笔记
Jan 28 Python
Python干货实战之八音符酱小游戏全过程详解
Oct 24 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
通过5个php实例细致说明传值与传引用的区别
2012/08/08 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
2014/12/18 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
PHP实现财务审核通过后返现金额到客户的功能
2019/07/04 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
2021/03/09 PHP
dwr spring的集成实现代码
2009/03/22 Javascript
JQuery的Validation插件中Remote验证的中文问题
2010/07/26 Javascript
JavaScript 继承使用分析
2011/05/12 Javascript
JS实现遮罩层效果的简单实例
2013/11/12 Javascript
javascript中的self和this用法小结
2014/02/08 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
js原型链与继承解析(初体验)
2016/05/09 Javascript
一个简单的JavaScript Map实例(分享)
2016/08/03 Javascript
JS实现的数字格式化功能示例
2017/02/10 Javascript
jQuery实现的动态文字变化输出效果示例【附演示与demo源码下载】
2017/03/24 jQuery
浅谈mint-ui 填坑之路
2017/11/06 Javascript
详解angular应用容器化部署
2018/08/14 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
layui问题之自动滚动二级iframe页面到指定位置的方法
2019/09/18 Javascript
node后端服务保活的实现
2019/11/10 Javascript
vue实现单一筛选、删除筛选条件
2020/10/26 Javascript
Python按行读取文件的实现方法【小文件和大文件读取】
2016/09/19 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
2016/09/21 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
2018/01/24 Python
Python使用requests发送POST请求实例代码
2018/01/25 Python
linux下安装python3和对应的pip环境教程详解
2019/07/01 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
2020/04/24 Python
Django中F函数的使用示例代码详解
2020/07/06 Python
纽约手袋品牌:KARA
2018/03/18 全球购物
函授药学自我鉴定
2014/02/07 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
2016年第32个教师节致辞
2015/11/26 职场文书
springboot用户数据修改的详细实现
2022/04/06 Java/Android