Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 延迟重新启动烧瓶应用程序_Python_Flask - Fatal编程技术网

Python 延迟重新启动烧瓶应用程序

Python 延迟重新启动烧瓶应用程序,python,flask,Python,Flask,我有一个烧瓶应用程序,其中这是我的main.py from king_slayer.database import init_db, manager from king_slayer.views import fetch_production if __name__ == '__main__': init_db() manager.run() 在执行manager.run()之前,我想调用 fetch_production() 所以我做了这个 from king_slaye

我有一个烧瓶应用程序,其中这是我的main.py

from king_slayer.database import init_db, manager
from king_slayer.views import fetch_production
if __name__ == '__main__':
    init_db()
    manager.run()
在执行
manager.run()
之前,我想调用

fetch_production() 
所以我做了这个

from king_slayer.database import init_db, manager
from king_slayer.views import fetch_production

if __name__ == '__main__':
    init_db()
    with manager.app.test_request_context():
        fetch_production()
    manager.run()
它起作用了。
问题是,当我关闭
Flask
应用程序,然后重新启动它时,它会在60-120秒内无法启动。没有错误,什么都没有。浏览器无法加载任何内容。出现一个简单的“加载问题页面”,过了一段时间,它就会正常工作,除非我再次重新启动
Flask
app

如果我删除

with manager.app.test_request_context():
            fetch_production()
延迟没有发生

p.S 如果我不对manager.app.test\u request\u context()使用
Flask抛出此错误

Traceback (most recent call last):
  File "main.py", line 8, in <module>
    fetch_production()
  File "/home/jarvis/Development/kingslayer/king_slayer/king_slayer/views.py", line 156, in fetch_production
    results={"msg": "Database Updated", }
  File "/home/jarvis/Development/kingslayer/local/lib/python2.7/site-packages/flask/json.py", line 235, in jsonify
    and not request.is_xhr:
  File "/home/jarvis/Development/kingslayer/local/lib/python2.7/site-packages/werkzeug/local.py", line 338, in __getattr__
    return getattr(self._get_current_object(), name)
  File "/home/jarvis/Development/kingslayer/local/lib/python2.7/site-packages/werkzeug/local.py", line 297, in _get_current_object
    return self.__local()
  File "/home/jarvis/Development/kingslayer/local/lib/python2.7/site-packages/flask/globals.py", line 20, in _lookup_req_object
    raise RuntimeError('working outside of request context')
RuntimeError: working outside of request context
进行一些函数调用,这些函数是在
views.py
中定义的,然后在文件系统中创建一个
.ini
文件。最后返回一个
return jsonify

  requests.get(config.SERVER, auth=HTTPBasicAuth(config.AUTH_USER, config.AUTH_PASSWORD))

实际上速度非常快,如果手动调用
fetch\u production()
,所需时间不会超过几毫秒。

fetch\u production()的作用是什么?在不确切知道
fetch\u production()
的情况下,我猜这是某种阻止动作,然后阻止了对
init\u db()的后续调用吗
尝试重新启动应用程序后。默认情况下,烧瓶(调用)是单线程的。当您尝试在另一个请求的上下文中使用
requests
向应用程序提供服务的端点发出请求时,服务器无法处理内部请求,直到外部请求完成,因此它最终会死锁。
  requests.get(config.SERVER, auth=HTTPBasicAuth(config.AUTH_USER, config.AUTH_PASSWORD))