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 相关文章推荐
在django中使用自定义标签实现分页功能
Jul 04 Python
Python 带有参数的装饰器实例代码详解
Dec 06 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
Jan 23 Python
详解Python匿名函数(lambda函数)
Apr 19 Python
Python Django实现layui风格+django分页功能的例子
Aug 29 Python
python异步编程 使用yield from过程解析
Sep 25 Python
django框架ModelForm组件用法详解
Dec 11 Python
Python包,__init__.py功能与用法分析
Jan 07 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
Feb 20 Python
Python Matplotlib简易教程(小白教程)
Jul 28 Python
使用PyCharm官方中文语言包汉化PyCharm
Nov 18 Python
用Python远程登陆服务器的步骤
Apr 16 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
自己动手做一个SQL解释器
2006/10/09 PHP
php生成N个不重复的随机数实例
2013/11/12 PHP
php自动载入类用法实例分析
2016/06/24 PHP
PHP命令行执行整合pathinfo模拟定时任务实例
2016/08/12 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
浅谈PHP面向对象之访问者模式+组合模式
2017/05/22 PHP
Javascript的并行运算实现代码
2010/11/19 Javascript
jQuery判断iframe中元素是否存在的方法
2013/05/11 Javascript
from表单多个按钮提交用onclick跳转不同action
2014/04/24 Javascript
在JavaScript中使用JSON数据
2016/02/15 Javascript
微信小程序  简单实例(阅读器)的实例开发
2016/09/29 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
node实现的爬虫功能示例
2018/05/04 Javascript
Puppet的一些技巧
2018/09/17 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
vue 解决遍历对象显示的顺序不对问题
2019/11/07 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
[02:40]DOTA2殁境神蚀者 英雄基础教程
2013/11/26 DOTA
浅析Python的web.py框架中url的设定方法
2016/07/11 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
2018/01/23 Python
对numpy的array和python中自带的list之间相互转化详解
2018/04/13 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
Python如何获得百度统计API的数据并发送邮件示例代码
2019/01/27 Python
jupyter notebook 的工作空间设置操作
2020/04/20 Python
Python Opencv实现单目标检测的示例代码
2020/09/08 Python
CSS3 Flexbox中flex-shrink属性的用法示例介绍
2013/12/30 HTML / CSS
HTML5中的音频和视频媒体播放元素小结
2016/01/29 HTML / CSS
39美元购买一副眼镜或太阳镜:39DollarGlasses.com
2018/06/17 全球购物
标准毕业生自荐信范文
2013/11/04 职场文书
尊老爱幼演讲稿
2014/09/04 职场文书
财务会计实训报告
2014/11/05 职场文书
2015教师个人年度工作总结
2015/10/23 职场文书
新手开公司创业注意事项有哪些?
2019/07/29 职场文书
MySQL中连接查询和子查询的问题
2021/09/04 MySQL
python代码实现扫码关注公众号登录的实战
2021/11/01 Python