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爬虫抓取豆瓣电影TOP100及用户头像的方法
Jan 20 Python
Python简单实现Base64编码和解码的方法
Apr 29 Python
Python中顺序表的实现简单代码分享
Jan 09 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
Apr 26 Python
Python工厂函数用法实例分析
May 14 Python
python编辑用户登入界面的实现代码
Jul 16 Python
pycharm修改界面主题颜色的方法
Jan 17 Python
django创建超级用户过程解析
Sep 18 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
Feb 07 Python
windows、linux下打包Python3程序详细方法
Mar 17 Python
Python Tornado批量上传图片并显示功能
Mar 26 Python
MAC平台基于Python Appium环境搭建过程图解
Aug 13 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
从C/C++迁移到PHP——判断字符类型的函数
2006/10/09 PHP
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
使用PHP访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
javascript使用eval或者new Function进行语法检查
2010/10/16 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
2014/02/04 Javascript
javascript 判断整数方法分享
2014/12/16 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
javascript实现点击单选按钮链接转向对应网址的方法
2015/08/12 Javascript
深入浅析AngularJS和DataModel
2016/02/16 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
解决layer弹层遮罩挡住窗体的问题
2018/08/17 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
2021/01/30 Javascript
JS模拟浏览器实现全局搜索功能
2019/09/11 Javascript
Vue切换Tab动态渲染组件的操作
2020/09/21 Javascript
在Python的Django框架中用流响应生成CSV文件的教程
2015/05/02 Python
python机器人运动范围问题的解答
2019/04/29 Python
利用python开发app实战的方法
2019/07/09 Python
python小白学习包管理器pip安装
2020/06/09 Python
Python如何定义有可选参数的元类
2020/07/31 Python
用python发送微信消息
2020/12/21 Python
浅析pandas随机排列与随机抽样
2021/01/22 Python
wordpress添加Html5的表单验证required方法小结
2020/08/18 HTML / CSS
英国汽车和货车租赁网站:Hertz英国
2016/09/02 全球购物
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
澳大利亚网上玩具商店:Mr Toys Toyworld
2018/03/25 全球购物
土地转让协议书
2014/04/15 职场文书
英语故事演讲稿
2014/04/29 职场文书
社团活动总结怎么写
2014/06/30 职场文书
商铺门前三包责任书
2014/07/25 职场文书
单位工作证明书格式
2014/10/04 职场文书
临时工聘用合同协议书
2014/10/29 职场文书
侵犯商业秘密的律师函
2015/05/27 职场文书
联村联户简报
2015/07/21 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang