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 深入理解yield
Sep 06 Python
给Python中的MySQLdb模块添加超时功能的教程
May 05 Python
Django学习笔记之ORM基础教程
Mar 27 Python
Python输入二维数组方法
Apr 13 Python
Windows下python3.6.4安装教程
Jul 31 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
Oct 09 Python
python+openCV利用摄像头实现人员活动检测
Jun 22 Python
用python打印1~20的整数实例讲解
Jul 01 Python
python常用库之NumPy和sklearn入门
Jul 11 Python
python修改FTP服务器上的文件名
Sep 11 Python
Python Sphinx使用实例及问题解决
Jan 17 Python
python小白切忌乱用表达式
May 29 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 和 MYSQL
2006/10/09 PHP
php获取QQ头像并显示的方法
2014/12/23 PHP
PHP使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
详解WordPress中添加和执行动作的函数使用方法
2015/12/29 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
Eclipse PHPEclipse 配置的具体步骤
2017/08/08 PHP
JAVASCRIPT keycode总结
2009/02/04 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
JavaScript中的toUTCString()方法使用详解
2015/06/12 Javascript
谈谈我对JavaScript DOM事件的理解
2015/12/18 Javascript
移动端 一个简单易懂的弹出框
2016/07/06 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
详解nodejs 文本操作模块-fs模块(一)
2016/12/22 NodeJs
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
Mac中安装nvm的教程分享
2017/12/11 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
Webpack 4如何动态切割JS注入文件名详解
2019/07/09 Javascript
layui对工具条进行选择性的显示方法
2019/09/19 Javascript
vue远程加载sfc组件思路详解
2019/12/25 Javascript
webpack安装配置与常见使用过程详解(结合vue)
2020/06/01 Javascript
[04:28]DOTA2亚洲邀请赛小组赛第五日 TOP10精彩集锦
2015/02/03 DOTA
Python处理XML格式数据的方法详解
2017/03/21 Python
在Python web中实现验证码图片代码分享
2017/11/09 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
python for循环输入一个矩阵的实例
2018/11/14 Python
关于python之字典的嵌套,递归调用方法
2019/01/21 Python
使用Bazel编译TensorBoard教程
2020/02/15 Python
PyQt5中QSpinBox计数器的实现
2021/01/18 Python
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
七年级地理教学反思
2014/01/26 职场文书
服装电子商务创业计划书
2014/01/30 职场文书
中秋晚会活动方案
2014/08/31 职场文书
2015年学校安全管理工作总结
2015/05/11 职场文书
python图片灰度化处理的几种方法
2021/06/23 Python