Я использую Python 3.5 и Django 1.8.5 с моим проектом, и недавно я встретил аналогичную проблему. Я могу легко запустить свой код xxx.py
с SIGNAL напрямую, но он не может быть выполнен на Django в виде пакета только из-за ошибки «сигнал работает только в основной теме».
Во-первых, работает сервер с --noreload --nothreading
, но для меня это слишком мало меняет код многопоточности.
Во-вторых, я обнаружил, что код в __init__.py
моего пакета работает в основной теме. Но, конечно, только основной поток может поймать этот сигнал , мой код в пакете не может его поймать. Он не может решить мою проблему, хотя это может быть для вас решением.
Наконец-то я обнаружил, что в Python есть встроенный модуль с именем subprocess
. Это означает, что вы можете запустить суб-полноценный процесс с ним, то есть этот процесс имеет свой собственный основной поток, поэтому вы можете легко запустить свой код с SIGNAL здесь. Хотя я не знаю производительность с ее использованием, она работает хорошо для меня. PS, вы можете найти все подробности о subprocess
в документации на Python.
Спасибо ~
У меня такая же проблема. Странная часть заключается в том, что я уверен, что я не использую ни одного потока. Я просто запускаю manage.py runningerver. –