Я возился с проектом Django.Чего я хочу добиться, так это запустить проект Django в другом процессе, в то время как родительский процесс инициирует загрузку написанного мной произвольного кода (серверная часть моего проекта).Очевидно, что процесс Django и родительские процессы взаимодействуют.Я бы хотел, чтобы словарь читался и записывался процессами.
У меня есть следующий код, основанный на примерах из здесь :
#!/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)
КогдаЯ нажимаю CTRL + C, чтобы убить процесс Django, я вижу, что сервер 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.Был ли завершен процесс Manager при выдаче SIGINT?Если это так, можно ли как-то помешать этому завершиться и завершиться основным процессом?
Надеюсь, это имеет смысл.Любая помощь очень получила.