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