我需要在我的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
如果我跑這在shell(我還沒有實際的Django應用程序測試此),直到work
過程,其完成任務的終端不會完全結束。作爲一個網絡應用程序,我需要立即返回該ID。我可以在不中斷的情況下將work
放置在背景上嗎?
謝謝。
我讀過這How do I run another script in Python without waiting for it to finish?,但我想知道其他方式來做到這一點,例如,堅持與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
|
,並等待
終於
[email protected]:~$ python mp3.py
I build things
18
done
[email protected]:~$
處理此問題的一種典型方法是使用工作隊列。在請求的地方填充隊列,並且可能使用由cron或其他調度程序啓動的單獨進程來佔用隊列。 – monkut
我已更新我的帖子。如果你運行它,它會掛起,直到腳本完成。我可以看到回報價值,但我很害怕懸掛。 – user1012451