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

首頁 > 開發 > Python > 正文

python多進程重復加載的解決方式

2024-09-09 19:03:16
字體:
來源:轉載
供稿:網友

flask多進程會引起重復加載,

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

測試發現,不是flask引起的,是多進程會引起重復加載python文件。

把flask注釋掉,也會重復加載。

# autotrade/__init__.py# __init__.py 定義全局的app路由# 然后將其他模塊由app裝飾后的函數導入,flask即可識別所有的請求入口import time from flask import Flaskfrom 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 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()

解決方法:把啟動換到一個新文件,然后在函數中調用這個文件,import也放在函數內部。

以上這篇python多進程重復加載的解決方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網之家。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 张家川| 宁河县| 读书| 积石山| 宿松县| 紫云| 历史| 保康县| 保定市| 日照市| 东乡| 综艺| 宝坻区| 西安市| 宝兴县| 临桂县| 白银市| 陈巴尔虎旗| 洪雅县| 四川省| 普兰店市| 普洱| 高清| 永清县| 双牌县| 日土县| 顺平县| 廊坊市| 肃北| 沐川县| 望奎县| 铁岭县| 衡山县| 浪卡子县| 崇州市| 兰溪市| 临夏县| 进贤县| 米林县| 嘉兴市| 泌阳县|