首先,我承认该标题中有几个或多个关键字,但我确实确实在尝试以正确的方式捕捉问题。这里的问题是,我似乎无法使用 python 多处理模块正确创建子进程,而不会导致网页响应挂起。我已经尝试了几个最新版本的 gunicorn,但问题仍然存在。有趣的是,这个问题从来都不是 ubuntu 服务器上的问题,但是现在将应用程序移动到 rhel6.5 这个问题本身就出现了。这是工作流程:
-路线被击中 -提交的表单会命中路由并触发创建 multiprocessing.Process() ,完成的工作是休眠 30 秒 -路由似乎已完成,作为打印多处理调用后的打印语句,但是浏览器保持连接打开并且在 30 秒 sleep 结束之前不会“完成加载”(显示页面)
请注意,表单提交不是此问题的一部分,它只是帮助查看问题的发生。
这是产生问题的一个非常简单的路由和函数:
def multi():
print 'begin multi'
time.sleep(30)
print 'end multi'
@app.route('/multiprocesstest', methods=['GET','POST'])
def multiprocesstest():
syntaxForm = forms.mainSyntaxForm()
if syntaxForm.validate_on_submit():
print 'before multi call'
th = multiprocessing.Process(target=multi)
th.start()
print 'after multi call'
return redirect('multiprocesstest')
return render_template('syntax_main.html', form=syntaxForm)
在对这个问题进行了广泛的研究和稀疏的谷歌搜索结果之后,我还没有找到任何结论。我将尝试使用另一个负载均衡器来检查问题是否仅出在 gunicorn 上。
最佳答案
将 multiprocessing
替换为 multiprocessing.dummy
可能会解决问题,因为 gunicorn
和 multiprocessing
都是多处理模块,并且当您尝试在单个进程中调用多个进程时,它可能会导致麻烦。
关于python - 使用 python 的 Multiprocessing 使响应卡在 gunicorn 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29175090/