我正在docker下構建一個django應用程式。在視圖中,我將 paramiko 稱為從一個容器到另一個容器的 ssh 連接以運行第三方應用程式的任務。問題是在呼叫另一個容器期間,我壓縮了“結果”檔案夾并將其移動到另一個地方。這需要一點。雖然代碼會回傳視圖并在 zip 檔案出現之前查找它應該在的位置。
任務.py
@shared_task()
def my_task():
command2 = f"""sudo cp /.../ibt1.msh /.../ibt1.msh && \n
until sudo zip -r result.zip ./output/; do sleep 5; done && \n
until sudo mv result.zip /europlexusData/result.zip; do sleep 5; done && \n
sudo rm -rf ./output
"""
host2 = " "
port =
username = " "
password = " "
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host2, port, username, password)
stdin, stdout, stderror = ssh.exec_command(command2, get_pty=True)
return 'Done'
視圖.py
my_task.delay()
file=open('zip/file/to/be/created/in/the/task')
return FileResponse(file)
uj5u.com熱心網友回復:
使用my_task.delay()意味著 my_task 將與視圖的其余部分并行運行。這意味著 my_task 甚至可能在您呼叫 open 之后就不會啟動。如果您洗掉對delay()您的任務的呼叫,它將一直運行到它結束,并且會在之后發生打開。
這不是一個好的做法,因為您的請求可能會超時,并且您的服務器將無緣無故忙碌,您應該:
- 警告您的客戶該任務已開始。
- 一旦你知道它完成了(通過訊息服務,或者等待足夠長的時間),讓你的客戶端查詢另一個獲取結果 zip 的路由。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/516650.html
上一篇:Docker鏡像有不同的名稱
