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中使用 Selenium 实现网页截图实例
Jul 18 Python
Django与遗留的数据库整合的方法指南
Jul 24 Python
梯度下降法介绍及利用Python实现的方法示例
Jul 12 Python
酷! 程序员用Python带你玩转冲顶大会
Jan 17 Python
对pandas数据判断是否为NaN值的方法详解
Nov 06 Python
Django使用Celery加redis执行异步任务的实例内容
Feb 20 Python
pycharm实现在虚拟环境中引入别人的项目
Mar 09 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
Jun 03 Python
Python之Matplotlib文字与注释的使用方法
Jun 18 Python
python 用opencv实现霍夫线变换
Nov 27 Python
python绘图subplots函数使用模板的示例代码
Apr 30 Python
Python的这些库,你知道多少?
Jun 09 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数组函数序列之array_combine() - 数组合并函数使用说明
2011/10/29 PHP
Codeigniter操作数据库表的优化写法总结
2014/06/12 PHP
php相对当前文件include其它文件的方法
2015/03/13 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
PHP获取用户访问IP地址的5种方法
2016/05/16 PHP
iis6手工创建网站后无法运行php脚本的解决方法
2017/06/08 PHP
prototype 的说明 js类
2006/09/07 Javascript
Js+Flash实现访问剪切板操作
2012/11/20 Javascript
jquery可见性过滤选择器使用示例
2013/06/24 Javascript
AngularJS内置指令
2015/02/04 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
2020/04/23 Javascript
jQuery 的 ready()的纯js替代方法
2016/11/20 Javascript
JS/jQuery判断DOM节点是否存在的简单方法
2016/11/24 Javascript
解析js如何获取css样式
2016/12/11 Javascript
详解webpack2异步加载套路
2018/09/14 Javascript
利用python实现数据分析
2017/01/11 Python
pandas实现选取特定索引的行
2018/04/20 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
在pycharm下设置自己的个性模版方法
2019/07/15 Python
python点击鼠标获取坐标(Graphics)
2019/08/10 Python
Python文件操作函数用法实例详解
2019/12/24 Python
a标签下载链接的简单实现
2016/09/13 HTML / CSS
Levi’s美国官网:美国著名的牛仔裤品牌
2016/08/19 全球购物
大学生就业推荐信范文
2013/11/29 职场文书
学前教育毕业生自荐信范文
2013/12/24 职场文书
简历的自我评价
2014/02/03 职场文书
公务员党员评议表自我鉴定
2014/09/14 职场文书
感恩母亲节活动总结
2015/02/10 职场文书
英语辞职信怎么写
2015/02/28 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
《鸟的天堂》教学反思
2016/02/19 职场文书
承诺书的签字人,需不需要承担相应的责任?
2019/07/09 职场文书
iPhone13将有八大升级
2021/04/15 数码科技
JavaScript canvas实现流星特效
2021/05/20 Javascript
Sleuth+logback 设置traceid 及自定义信息方式
2021/07/26 Java/Android