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生成器的使用方法
Nov 21 Python
python实现定时播放mp3
Mar 29 Python
Python读csv文件去掉一列后再写入新的文件实例
Dec 28 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
May 29 Python
django 通过url实现简单的权限控制的例子
Aug 16 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
Sep 16 Python
对Tensorflow中Device实例的生成和管理详解
Feb 04 Python
python实现图像拼接
Mar 05 Python
python同时遍历两个list用法说明
May 02 Python
python线程池 ThreadPoolExecutor 的用法示例
Oct 10 Python
Python调用SMTP服务自动发送Email的实现步骤
Feb 07 Python
python 基于pygame实现俄罗斯方块
Mar 02 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 代价太高
2016/04/26 PHP
Laravel中的Blade模板引擎示例详解
2017/10/10 PHP
浅谈laravel aliases别名的原理
2019/10/24 PHP
用JavaScript调用WebService的示例
2008/04/07 Javascript
JavaScript 动态生成方法的例子
2009/07/22 Javascript
javascript 时间比较实现代码
2009/10/28 Javascript
Javascript面向对象编程(二) 构造函数的继承
2011/08/28 Javascript
利用Keydown事件阻止用户输入实现代码
2014/03/11 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
简单实现js选项卡切换效果
2016/02/03 Javascript
基于Javascript实现倒计时功能
2016/02/22 Javascript
基于JavaScript实现智能右键菜单
2016/03/02 Javascript
JS数字千分位格式化实现方法总结
2016/12/16 Javascript
jQuery为DOM动态追加事件的方法
2017/02/16 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
2018/09/05 jQuery
JS数组求和的常用方法实例小结
2019/01/07 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
vue 实现锚点功能操作
2020/08/10 Javascript
springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)
2020/10/15 Javascript
用Python实现一个简单的线程池
2015/04/07 Python
Python实现批量下载文件
2015/05/17 Python
Python字符串特性及常用字符串方法的简单笔记
2016/01/04 Python
python八大排序算法速度实例对比
2017/12/06 Python
Win10下python 2.7.13 安装配置方法图文教程
2018/09/18 Python
浅析python表达式4+0.5值的数据类型
2020/02/26 Python
Django Serializer HiddenField隐藏字段实例
2020/03/31 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
CSS3实现自定义Checkbox特效实例代码
2017/04/24 HTML / CSS
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
加大码胸罩、内裤和服装:Just My Size
2019/03/21 全球购物
学习标兵获奖感言
2014/02/20 职场文书
幼儿园教师教育感言
2014/02/28 职场文书
中文专业毕业生自荐信
2014/05/24 职场文书
计算机系本科生求职信
2014/05/31 职场文书
2014年教育工作总结
2014/11/26 职场文书
公司表扬信格式
2015/05/04 职场文书