Почему это?Какая разница?Разве они не темы?
Нет.LoopingCall
использует callLater
;он запускает вызовы в реакторе.
Все мои self.sendLine в LoopingCall выполняются немедленно.
Да, как и должно быть.
Те, что в callInThread не являются.
Это не так много, что они не выполняются, это потому, что вы вызвали реактор API из потока, который вы никогда не позволяя делать , вы переводите свою программу в состояние, в котором все полностью сломано, навсегда .Каждый будущий вызов API может привести к причудливым, ошибочным результатам или отсутствию результатов, или случайным необъяснимым сбоям.
Знаете, нормальный способ работы многопоточных программ; -).
Повторять: каждыйAPI в витой, за единственным исключением callFromThread
(и, соответственно, вещи, которые вызывают callFromThread
, такие как blockingCallFromThread
), не безопасен для потоков .К сожалению, вставка предупреждений для каждого отдельного API была бы кошмаром для обслуживания кода, поэтому несколько пользователей обнаружили это ограничение так же, как вы, вызвав API и заметив что-то странное.
Если у вас естьнекоторый код, который выполняется в потоке, который должен вызывать API реактора, использует callFromThread
или blockingCallFromThread
, и он будет отправлять вызов в поток реактора, где все должно работать гладко.Однако для таких вещей, как синхронизированные вызовы, совсем не нужно использовать потоки, и они без необходимости усложнят вашу программу.