2013-10-27 53 views
3

如果我有以下代碼:Ajax調用的Python

$('#do-updates').click(function() { 
    $.post('/do_updates/', 
     function(response){ 
      location.reload(); 
    }); 
}); 

並調用Python函數是:

def do_update(): 
    for item in items: 
     do something 

Python函數調用我需要2m左右完成。

如果用戶執行以下操作:

1 - Click on the #do-updates button 
2 - Navigate away from the page after 10s 

會發生什麼?整個do_updates()函數是否會運行,因爲它是異步調用的?或者這個功能會超時嗎?如果超時,在後臺執行do_updates()函數的更好方法是什麼?

+0

您使用的服務器端的哪個Web框架? –

+0

Django和apache – David542

+0

您應該使用某種推送技術(如Websockets)來實現此功能,並輪詢您的服務器以獲取進度信息,而不是等待請求完成。 – Blender

回答

2

如果你不需要前端的do_something結果,你可以使用一些異步任務解決方案。 Celery可能是django最流行和最簡單的。 它將工作委託給通過消息隊列(rabbitmq,redis,..)作爲不同進程運行的專用工作者。