私はDjangoプロジェクトを使いこなしてきました。 私が達成したいのは、親プロセスが私が書いた任意のコード(私のプロジェクトのバックエンド)の読み込みを開始する間に、Djangoプロジェクトが別のプロセスで起動することです。明らかに、Djangoプロセスと親プロセスが通信します。私は、プロセスによって読み込まれて書かれた辞書を希望します。KeyboardInterruptでプロセスが終了しないようにするには?
私はhereからの例に基づいて以下のコードを、持っている:私はDjangoのプロセスを殺すために、Ctrl + Cを押すと
#!/usr/bin/env python
from multiprocessing import Process, Manager
import os
import time
from dj import manage
def django(d, l):
print "starting django"
d[1] = '1'
d['2'] = 2
d[0.25] = None
l.reverse()
manage.start()
def stop(d, l):
print "stopping"
print d
print l
if (__name__ == '__main__'):
os.system('clear')
print "starting backend..."
time.sleep(1)
print "backend start complete."
manager = Manager()
d = manager.dict()
l = manager.list(range(10))
p = Process(target=django, args=(d, l))
p.start()
try:
p.join()
except KeyboardInterrupt:
print "interrupt detected"
stop(d, l)
を、私は、Djangoのサーバーがシャットダウン、およびstop()
が呼ばれて見ています。それから私が見たいのは辞書d
です。リストはl
です。
出力は次のとおりです。
starting backend...
backend start complete.
starting django
Validating models...
0 errors found
Django version 1.3, using settings 'dj.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
^Cinterrupt detected
stopping
<DictProxy object, typeid 'dict' at 0x141ae10; '__str__()' failed>
<ListProxy object, typeid 'list' at 0x1425090; '__str__()' failed>
それは、CTRL + Cのイベントの後で辞書やリストを見つけることができません。 SIGINTの発行時にManagerプロセスが終了しましたか?そうであれば、そこで終了してメインプロセスで終了するのをやめてもらえますか?
これは意味があると思います。 どんな助けも受けました。
これは、一般的には悪いアイデアのように聞こえます。本番環境での実行には適していない組み込みの開発サーバーでのみ機能します。 –
それを考え始めました。おそらく、これを達成する別の方法を見つけなければならないでしょう。 –