これはDjangoサイトで緊急に必要ですが、時間の制約があるため、大幅な変更を行うことはできません。これはおそらく最も安価なインプレース変更です。
build
どちらかに焦点を当てるとrun
...
今、私はIDを元に戻します
build
(または実行します)。重い作業はすべて別の機能になりました。
'
import multiprocessing as mp
def main():
id = get_build_id(....)
work = mp.Process(target=heavy_build_fn)
work.start()
return id
これをシェルで実行した場合(実際のDjangoアプリでこれをテストしていません)、work
プロセスがそのジョブで完了するまで、ターミナルは完全に終了しません。Webアプリとして、すぐにIDを返す必要があります。work
中断せずに背景に配置できますか?
ありがとう。
これを読みましたPythonで別のスクリプトを、終了するのを待たずに実行するにはどうすればよいですか?、しかし私はそれを行う他の方法を知りたいです、例えば、MPに固執する。解決策はPopen
私が実際に望んでいるものではないかもしれません。
import multiprocessing as mp
import time
def build():
print 'I build things'
with open('first.txt', 'w+') as f:
f.write('')
time.sleep(10)
with open('myname.txt', 'w+') as f:
f.write('3')
return
def main():
build_p = mp.Process(name='build process', target=build)
build_p.start()
build_p.join(2)
return 18
if __name__ == '__main__':
v = main()
print v
print 'done'
コンソール:
I build things
18
done
|
待って
ついに
user@user-P5E-VM-DO:~$ python mp3.py
I build things
18
done
user@user-P5E-VM-DO:~$