pythonのmultiprocessing処理

プロセスベースの並列処理(pythondjango環境)

ファイルダウンロードの場合、

  • A処理は、ラッパーページを出す;
  • B処理はファイルの状態を監視する(ダウンロード可能となるとリンクを出す)

このように書くと、メソッドAが別途で実行されます。
p = Process(target=メソッドA, args=(引数1, 引数2,))
p.start()

 

Bのほうは、jqueryajax)を利用して、繰り返して監視する

HTML
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
    <script type="text/javascript">
    window.onload=showPro;
    var bar = 1;
    var my_time;
    var file_name = "{{filename}}";
    var flg;
    function showPro(){
        var pro = document.getElementById("div2");
        pro.style.width = bar+"px";
        bar = bar+5;
        my_time = setTimeout("showPro()",500);
        $("p").hide();
    $.ajax({
        url: "/download_file/",
        type: "POST",
        data: null,
        success: function (data) {
            data = JSON.parse(data);
            if (data["flg"] == 1) {
                pro.style.width = '100%';
       clearTimeout(my_time);
                $("p").show();
            }
        }
    });
    }
    </script>

 

Forkは以下のように有効ですが、Windows環境で使えないのは残念
new_pid = os.fork()
if new_pid == 0:
  return output_html(request, filepath)
else:
  その他の処理