python多进程重复加载的解决方式
作者:ShellCollector 发布时间:2021-07-22 23:49:43
标签:python,多进程,重复加载
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也放在函数内部。
来源:https://blog.csdn.net/jacke121/article/details/88904837
0
投稿
猜你喜欢
- 一般来说,我们判断 iframe 是否加载完成其实与 判断 JavaScript 文件是否加载完成 采用的方法很类似:var&nb
- 我想把本篇作为css基础教程的序曲,从今天开始翻译和整理我从设计网页以来所学到的css基础知识。本教程会分成N个部分,单独发表,其间可能会插
- 进程与线程的历史我们都知道计算机是由硬件和软件组成的。硬件中的CPU是计算机的核心,它承担计算机的所有任务。 操作系统是运行在硬件之上的软件
- 写在前面:从昨晚的梦里回忆起数据管理的作业:实现一个自己的选题----毕业生信息管理系统,实现学生个人信息基本的增删改查,我想了想前段时间刚
- 摸到她了!青翠的衣衫,奶白的肌肤,捧在手上的感觉真是太好了,心里美滋滋的。《悟透JavaScript》,一本偶然之作,终于成书并出版了。本书
- 线性回归是一种常见的机器学习算法,也是人工智能中常用的算法。它是一种用于预测数值型输出变量与一个或多个自变量之间线性关系的方法。例如,你可以
- 用户管理是绝大部分Web网站都需要解决的问题。用户管理涉及到用户注册和登录。用户注册相对简单,我们可以先通过API把用户注册这个功能实现了:
- 在现在的项目里,不管是电商项目还是别的项目,在管理端都会有导出的功能,比方说订单表导出,用户表导出,业绩表导出。这些都需要提前生成excel
- 1.官网下载Pycharm community版如pycharm-community-2017.3.1.tar.gz。2. #解压tar.g
- 几个常用装饰器pytest.ini 配置文件 例子:[pytest]addopts = -v -s --html=py_test/scrip
- 最近有Win10系统用户反映,由于自己的电脑安装有两个python软件,所以想要卸载掉其中一个,不过在卸载的时候却发现无法卸载,并且出现提示
- 序言这次玩次狠得。除了编译器使用yum安装,其他全部手动编译。哼~看似就Nginx、PHP、MySql三个东东,但是它们太尼玛依赖别人了。没
- slice(切片)是 go 里面非常常用的一种数据结构,它代表了一个变长的序列,序列中的每个元素都有相同的数据类型。 一个 slice 类型
- 通过百度云API接口抽取得到产品评论的观点,也掠去了很多评论中无用的内容以及符号,为后续进行文本主题挖掘或者规则的提取提供基础。工具 1、百
- 从98年某月某日我的第一个个人猪页诞生.到2008年的今天.宣告了我从事设计行业整整十年.十年,很多变化,从摆弄个人猪页到现在以做设计为生,
- 在开发WEB应用程序中,我们经常需要对文件系统中的驱动器、文件夹和文件进行处理,比如收集驱动器的相关信息;创建、添加、移动或删除文件夹和文件
- 我们前面介绍的Selenium的WebDriver测试方法是基于网页来进行的。之前的例子都是用简单的网页来操作,可能体会不到网页的加载过程,
- 前言django是python语言的一个web框架,功能强大。配合一些插件可为web网站很方便地添加搜索功能。搜索引擎使用whoosh,是一
- 在看到7yue博客——“换手来用”的思考 有这么一句话:RIA是一个更趋向于“体验”设计的领域,不仅仅包括“开发人员”,还包括“设计人员”,
- 本文解决问题:批量删除多行txt文本中的内容。思路:1.找出需要删除行的 id(就是需要删除那些行,把这是第几行给记录下来。)2.将原文本内