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 相关文章推荐
利用一个简单的例子窥探CPython内核的运行机制
Mar 30 Python
pygame学习笔记(4):声音控制
Apr 15 Python
Python实现的数据结构与算法之队列详解
Apr 22 Python
python正则表达式及使用正则表达式的例子
Jan 22 Python
Python切片操作深入详解
Jul 27 Python
python Tkinter的图片刷新实例
Jun 14 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
Jun 27 Python
Python Opencv任意形状目标检测并绘制框图
Jul 23 Python
Flask框架模板继承实现方法分析
Jul 31 Python
Tensorflow训练模型越来越慢的2种解决方案
Feb 07 Python
Python中的wordcloud库安装问题及解决方法
May 27 Python
Python 使用Opencv实现目标检测与识别的示例代码
Sep 08 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
Sorting Array Values in PHP(数组排序)
2011/09/15 PHP
php中怎么搜索相关联数组键值及获取之
2013/10/17 PHP
php命令行用法入门实例教程
2014/10/27 PHP
php利用cookies实现购物车的方法
2014/12/10 PHP
详解PHP对数组的定义以及数组的创建方法
2015/11/27 PHP
PHP常见错误提示含义解释(实用!值得收藏)
2016/04/25 PHP
PHP  Yii清理缓存的实现方法
2016/11/10 PHP
javascript 一个函数对同一元素的多个事件响应
2009/07/25 Javascript
ExtJS Grid使用SimpleStore、多选框的方法
2009/11/20 Javascript
jQuery实现防止提交按钮被双击的方法
2015/03/24 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
2016/03/09 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
JavaScrpt中如何使用 cookie 设置查看与删除功能
2017/07/09 Javascript
JavaScript简单实现合并两个Json对象的方法示例
2017/10/16 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
2018/05/16 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
2018/09/07 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
js实现搜索提示框效果
2020/09/05 Javascript
python网络编程之文件下载实例分析
2015/05/20 Python
Python实现股市信息下载的方法
2015/06/15 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
Django URL传递参数的方法总结
2016/08/28 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
Python二叉树的定义及常用遍历算法分析
2017/11/24 Python
Python排序搜索基本算法之希尔排序实例分析
2017/12/09 Python
深入了解Django中间件及其方法
2019/07/26 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
2020/03/24 Python
Python自省及反射原理实例详解
2020/07/06 Python
浅谈django不使用restframework自定义接口与使用的区别
2020/07/15 Python
python opencv实现图像配准与比较
2021/02/09 Python
社区中秋节活动方案
2014/01/29 职场文书
司马光教学反思
2014/02/01 职场文书
给校长的建议书600字
2014/05/15 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书
python爬取新闻门户网站的示例
2021/04/25 Python