- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图通过使用pool.map
让进程池在其上工作来运行一个耗时的循环。该循环是 View 函数的一部分,我已将其放置在新函数中,以便可以将其传递给 pool.map。但这会引发错误 -
RuntimeError: Working outside of application context.
This typically means that you attempted to use functionality that needed to interface with the current application object in some way. To solve this, set up an application context with app.app_context(). See the documentation for more information.
我确实将方法调用放在 with app.app_context()
中(如前所述 here )。但错误并没有消失。请告诉我如何解决这个问题。
@app.route('/some_url', methods= ['POST'])
def view_function ():
start_time = time.time()
data = request.get_json()
a = round(data.get('a', '') * data.get('a', ''))
b = round(data.get('b', '') * data.get('b', ''))
c = round(data.get('c', '') * data.get('c', ''))
d = round(data.get('d', '') * data.get('d', ''))
a_id = select.get_id(data.get('property', ''), session['somedata'][1])
some_list, a_ids, loc = AnotherClassInDifferentDir.get_list(a_id, session['somedata'][1])
value = select.get_value(//some arguments)
这是我使用多处理的地方,也是我使用 with app.app_context():
(这是同一函数 view_function
的一部分)-
with app.app_context():
e = data.get('e', '')
stuff = session['somedata'][1]
pool = Pool(processes = 2)
func = partial(loopTask,e, a_id, a_ids, a, b, c, d, loc, stuff)
stuff_array = [(index, item) for index, item in enumerate(some_list)]
print("stuff_array =", stuff_array)
pool.map(func, stuff_array)
pool.close()
pool.join()
print("--- %s seconds ---" % (time.time() - start_time))
return ''
def loopTask(e, a_ids, a, b, c, d, loc, stuff, stuff_item):
index, s = stuff_item
c_id = document_ids[index]
done = AnotherClassInDifferentDir.work(s)
f = AnotherClassInDifferentDir.more_work(done, a, b, c, d, loc)
if f != '':
update.update_work(//some arguments)
g.cnxn.commit()
if (moreDB.check(//some arguments) ==0):
update.work(//some arguments)
g.cnxn.commit()
else:
pass
我相信 g.cnxn.commit()
导致了此问题,因为它是由应用程序上下文公开的,但我不确定。请帮忙!
编辑
g.cnxn
使用装饰器 @app.before_request
@app.before_request
def connect_to_database():
if request.endpoint != 'static':
if not hasattr(g,'cnxn'):
g.cnxn = pyodbc.connect('DRIVER={{Some Driver}};config1={};config2={};Trusted_connection=yes'.format(app.config['config1'],app.config['config2']))
最佳答案
如 Flask docs 中所示,应用程序上下文在请求之外不可用,这是当 loopTask
在不同进程中运行时发生的情况。考虑将您的应用实例传递给 loopTask
函数,并将其下使用 g
命名空间对象的代码部分包装在 with block 内。实际上不需要在 view_function
中使用 with
block ,因为请求期间应用上下文已经存在。
编辑:因为我们在每个请求之前设置数据库连接,所以我们使用 test_request_context
。您可以阅读更多相关信息here 。它用于测试,但出于我们的目的,它将允许我们在生成的进程中拥有数据库连接。
def loopTask(e, a_ids, a, b, c, d, loc, stuff, stuff_item, app): # added app parameter
index, s = stuff_item
c_id = document_ids[index]
with app.test_request_context('/some_url'):
app.preprocess_request() # triggers 'connect_to_database'
done = AnotherClassInDifferentDir.work(s)
f = AnotherClassInDifferentDir.more_work(done, a, b, c, d, loc)
if f != '':
update.update_work(//some arguments)
g.cnxn.commit()
if (moreDB.check(//some arguments) ==0):
update.work(//some arguments)
g.cnxn.commit()
else:
pass
这意味着 with
block 更改为:
e = data.get('e', '')
stuff = session['somedata'][1]
pool = Pool(processes = 2)
func = partial(loopTask,e, a_id, a_ids, a, b, c, d, loc, stuff, stuff_item)
stuff_array = [(index, item) for index, item in enumerate(some_list)]
print("stuff_array =", stuff_array)
pool.map(func, (stuff_array, app)) # passing the `app` Flask instance here
pool.close()
pool.join()
这应该可以解决问题,但理想情况下,我们应该在一个可以在 loopTask
中重用的函数中设置数据库连接。这样,我们就不需要 test_request_context
并使用 app_context
来代替。
关于python - app.app_context() 的 RuntimeError : Working outside of application context. 无法解决问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60216421/
一、前言: Python如何使用OS模块调用cmd 在os模块中提供了两种调用 cmd 的方法,os.popen() 和 os.system() os.system(cmd) 是在执行command命
我对双链表进行了简化。我的双链表是一个以头和尾为节点的结构。 有一个函数可以创建列表并返回它。在同一函数中,我执行尾节点和头节点之间的链接。问题是,当我返回列表(因此转到函数之外)时,所有链接都消失了
我有这个信息。 let params2: [String: AnyObject] = [ "app_token": myapptoken, "member_access_token":
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 7 年前。 Improve
我正在尝试发出解析为特定 IP 的 cURL 请求。从我读过的所有内容来看,这在我看来在语法上是正确的,但我仍然看到“无法解决主机错误”。有人能指出我正确的方向吗?我看到了各种错误: curl —-r
我正在尝试使用 curl 在 jira 服务器中获取数据。我试过这个命令 curl -u username:password -X GET -H "Content-Type: applicat
因此,下面的代码有时会起作用,有时它会添加&符号(到复制缓冲区),我试图从文本字符串中删除它。 代码的要点是将字符串从正确位置复制到与号之前。但是,在随机情况下,它仍然会添加 & 符号。 Privat
p = Int('p') q = Int('q') s = Solver() s.add(1<=p<=9, 1<=q<=19, 5<(3*p-4*q)<10) s.check() print s.mo
我在这里阅读了分配问题的解决方案:http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=hungarianAlgorithm 我了解 O(n
控制台中显示警告: the id param was not provided. 文档提到将使用当前路由: current is the current Route by default (most
我正在尝试使用hector-core作为grails Maven构建中的依赖项。 me.prettyprint hector-core 1.0-3 bundle 我收到一个错误 [
我正在尝试使用 JavaScript 变得更好,并且我在破坏页面方面做得非常好:))))) 我正在尝试使用 Firebug 进行调试,但一开始有点困惑。它的哪个选项卡用于调试 JavaScript?我
我正在使用最新的 Angular + Firebase 并尝试设置登录授权系统。我有包含登录+注册链接的 home.html,转到 login.html 并添加凭据工作正常(提交时记录正确的 UID)
我有一个 iPad 应用,现在需要将其转换为通用应用。我已将目标设置为 Universal,现在它也可以部署到 iPhone,但是,我有一个主要问题:即使我已经创建了我的 main分别查看两种设备类型
我在 CSS 中使用媒体查询来根据 IE11 和 Chrome 的屏幕分辨率缩放我的网页。当我运行 this webpage在我的 2 个不同屏幕上的 chrome(顺便说一句,我用它来确定我的最小宽
我正在解决nodeschool练习“Juggling Async”,我是这样解决的 var http=require("http"); var urls=process.argv.slice(2,pr
我试图相对神秘地要求一个文件,发生了以下情况 这很好,它指向 /Users/marcos/Desktop/Taper/lib/utils.js myPath = "/Users/marcos/Desk
我正在尝试解决一个项目,但遇到了问题。 • 您的程序应该显示一个菜单,允许用户执行以下操作以下操作(注:使用GUI): 添加新客户 删除客户 修改客户信息//此选项必须显示子菜单: --------1
我需要 x 图标来删除输入字段值1. 当用户键入任何内容时,将显示“x”图标 如果输入框中没有可用的值,x 将被隐藏 当输入框中的值可用并且焦点移出输入框时,我们需要隐藏 x 图标并聚焦,我们需要再次
我正在使用 ajs(1.4.7) 和 angular-ui-router(0.2.15) 开发一个简单的 AJS 应用程序。 经历了this文章并选择了路由解析技术。 这是我遇到的错误 错误:[$in
我是一名优秀的程序员,十分优秀!