国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Python > 正文

python多進(jìn)程重復(fù)加載的解決方式

2024-09-09 19:03:15
字體:
供稿:網(wǎng)友

flask多進(jìn)程會引起重復(fù)加載,

解決方法:把耗資源的加載挪到函數(shù)里面或者類里面,就不會重復(fù)加載資源了。

測試發(fā)現(xiàn),不是flask引起的,是多進(jìn)程會引起重復(fù)加載python文件。

把flask注釋掉,也會重復(fù)加載。

# autotrade/__init__.py# __init__.py 定義全局的app路由# 然后將其他模塊由app裝飾后的函數(shù)導(dǎo)入,flask即可識別所有的請求入口import time from flask import Flaskfrom multiprocessing import Process # 配置全局app # 導(dǎo)入index中定義的所有函數(shù)# from autotrade.server.index import *print("import will repeat")def run_index():  print("run_index once")  app = Flask(__name__)  # 啟動web服務(wù)器,使用多線程方式,接收所有http請求  app.run(host='0.0.0.0', port=5000, threaded=True,debug=False) def run_orders():  # 啟動查詢交易程序  while True:    print('執(zhí)行相應(yīng)的交易程序')    time.sleep(3) def main():  # 主程序  # 創(chuàng)建子進(jìn)程  jobs = []  jobs.append(Process(target=run_index))  # jobs.append(Process(target=run_orders))  # 啟動子進(jìn)程  for job in jobs:    job.start()   # 等待子進(jìn)程結(jié)束返回  for job in jobs:    job.join() if __name__ == '__main__':  # run_index()  main()

一般情況,把需要加載的封裝到函數(shù)或者類中就可以了,

但是有一個例外:就是SQLAlchemy

必須在py文件中實(shí)例化,

from flask_login import LoginManagerfrom flask_mail import Mailfrom flask_socketio import SocketIOfrom flask_migrate import Migratefrom flask_rq2 import RQfrom flask_wtf.csrf import CSRFProtectfrom monitor.common.storage import LocalStorage, QiniuStorage, ObjectStorageimport config.global_var as gl_var# from monitor.common.es_search import ESearchEngineQINIU_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._dbprint("import foundation")import threadingclass 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()

解決方法:把啟動換到一個新文件,然后在函數(shù)中調(diào)用這個文件,import也放在函數(shù)內(nèi)部。

以上這篇python多進(jìn)程重復(fù)加載的解決方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持武林網(wǎng)之家。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 沾益县| 东方市| 湖北省| 黔南| 沈阳市| 唐山市| SHOW| 紫阳县| 淅川县| 泰兴市| 星子县| 霞浦县| 自贡市| 买车| 西吉县| 囊谦县| 新营市| 徐汇区| 长治县| 灵台县| 遵义市| 蕲春县| 蛟河市| 拉萨市| 怀集县| 延庆县| 绵阳市| 石屏县| 桃园市| 西华县| 四川省| 云龙县| 柳州市| 平乡县| 东城区| 团风县| 清水县| 和龙市| 波密县| 平山县| 苗栗市|