@app.route('/result/<case_id>')
def result(case_id):
USER_FOLDER = os.path.join(UPLOAD_FOLDER + '/' + Case_ID)
Analysis_code.main(USER_FOLDER, Case_ID, Case_ID + '_mRNA_file.txt', Case_ID + '_lncRNA_file.txt', Case_ID + '_miRNA_file.txt')
return render_template('test.html',case_id=Case_ID)
在我的结果路径中,我调用了来自另一个文件的函数。但是当烧瓶执行Analysis_code.main()时,它没有足够的时间来运行代码。
在我的Analysis_code.main()中,关联def似乎没有完成保存文件作业,并且服务器返回网关超时错误。
def main():
correlation(PATH, CASE_ID, mRNA_file_name, lncRNA_file_name, miRNA_file_name)
bipartite_network(PATH, CASE_ID)
有什么方法可以解决这个问题吗?我已经搜索过子进程,但它似乎不适合我。
我试图弄清楚如何返回render_template,而另一个python代码的def调用仍然可以在后台完成。 现在,render_template必须等待函数调用完成,以便它可以返回网页。
答案 0 :(得分:0)
但是其他人建议使用子流程,如果您不介意为项目增加一点复杂性,则可以使用celery异步处理此任务。
您通常可以保持相同的烧瓶路径代码,但是将要异步处理的内容移到用delay调用的celery任务中。
# you'll need to configure celery for flask
celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'])
@celery.task
def analysis(case_id):
USER_FOLDER = os.path.join(UPLOAD_FOLDER + '/' + case_id)
Analysis_code.main(USER_FOLDER, case_id,
case_id + '_mRNA_file.txt',
case_id + '_lncRNA_file.txt',
case_id + '_miRNA_file.txt')
@app.route('/result/<case_id>')
def result(case_id):
analysis.delay(case_id)
return render_template('test.html',case_id=case_id)