我目前运行一个flask应用程序,注册后为用户创建了一个docker文件,如何在我创建一个函数start()的背景下使用一个子进程启动docker-compose up -d进程),当用户单击我的注册表单上的“提交”按钮后调用
command = 'docker-compose up -d' def start(command): subprocess.run(shlex.split(command), cwd=dir, check=True)
但是我注意到注册无效,因为它正在等待后台完成流程,我想要的是让用户填写表格,然后当用户单击注册按钮时,它应该称为开始()函数,然后显示我的感谢页面
我目前运行一个flask应用程序,注册后为用户创建了一个docker文件,如何在后台使用子进程启动docker-compose up -d进程,我创建了函数start()...
根据子流程文档(https://docs.python.org/3/library/subprocess.html#subprocess.run),运行将等待命令完成,然后返回CompletedProcess实例。如果要解决此问题,则应为其提供自己的线程,这将允许Flask请求完成(并且您的用户可以获取“谢谢”页面。)
import threading
def start(command):
subprocess.run(shlex.split(command), cwd=dir, check=True)
@app.route('/register')
def register():
...
thread = threading.Thread(target=start, args=('docker-compose up -d',))
thread.start()
return jsonify(msg='success'), 200