То, что вы делаете неправильно, - это блокирующий вызов (time.sleep(2)
), в то время как Twisted ожидает, что вы будете выполнять только неблокирующие операции.Вещи, которые не ждут.Поскольку у вас есть time.sleep(2)
, Twisted больше ничего не может делать, пока эта функция находится в спящем режиме.Поэтому он также не может отправлять данные в браузер.
В случае time.sleep(2)
вы бы заменили это другим вызовом reactor.callLater
.Предполагая, что вы действительно хотели, чтобы вызов time.sleep(2)
был какой-то другой операцией блокировки, как ее исправить, зависит от операции.Если вы можете выполнить операцию неблокирующим образом, сделайте это.Для многих таких операций (например, взаимодействие с базой данных) Twisted уже поставляется с неблокирующими альтернативами.Если то, что вы делаете, не имеет неблокирующего интерфейса и у Twisted нет альтернативы ему, возможно, вам придется запускать код в отдельном потоке (используя, например, twisted.internet.threads.deferToThread
), хотя для этого требуется, чтобы ваш код былна самом деле потокобезопасен.