Как сложить два целых числа с помощью Twisted?
-
26-10-2019 - |
Вопрос
В моей программе есть два целых числа;давай позвоним им»a
" и "b
".Я хотел бы сложить их вместе и получить в результате еще одно целое число.Это обычный Python int
объекты.Мне любопытно;как мне добавить их вместе с Twisted?Есть ли специальный performAsynchronousAddition
где-то функционировать?Нужен ли мне Deferred
?А что с реактором?Реактор задействован?
Решение
ОК, чтобы быть ясным.
Свигал ничего не делает с Задачи процессора И не по уважительной причине. Там нет способа сделать работу по вычислительному решению, выполнившись быстрее, переупорядочивая подзадачи; Единственное, что вы могли бы сделать, это добавить больше вычислительных ресурсов; И даже это не сработает в Python из -за тонкости его реализации.
Twisted предлагает специальную семантику и обработку цикла мероприятий на случай, если программа станет »застрявший"В ожидании чего -то вне его управления; наиболее обычно процесс, работающий на другой машине, и общение с вашим скрученным процессом через сетевое соединение. Поскольку вы будете ожидающий В любом случае, Twisted дает вам механизм, чтобы получить больше вещей, которые в то же время. То есть Twisted обеспечивает параллелизм для Связанные задачи ввода/вывода
TL; DR: Twisted для сетевого кода. Все остальное просто нормальный питон.
Другие советы
Как насчет этого:
c = a + b
Это должно работать, и это не нужно делать асинхронно (это довольно быстро).
Хороший вопрос, и Twisted (или Python) должен иметь способ, по крайней мере, создавать «a + b» для нескольких ядер (на моем 8-ядерном i7).
К сожалению, Python GIL предотвращает это, а это означает, что вам придется ждать не только выполнения задачи, связанной с ЦП, но и выполнения работы одним ядром, в то время как семь других ядер ничего не делают.
Примечание:Возможно, лучшим примером будет «a() + b()» или даже «fact(sqrt(a()**b())» и т. д.но важным фактом является то, что описанная выше операция заблокирует одно ядро, а GIL в значительной степени не позволяет Python делать что-либо еще во время этой операции, что может занять несколько мс...