Как добавить два целых числа вместе с Twisted? - PullRequest
46 голосов
/ 06 сентября 2011

У меня в программе два целых числа;давайте назовем их "a" и "b".Я хотел бы сложить их вместе и получить в результате другое целое число.Это обычные объекты Python int.Я задаюсь вопросом;как добавить их вместе с Twisted?Где-то есть специальная функция performAsynchronousAddition?Нужна ли мне Deferred?А как насчет реактора?Включен ли реактор?

Ответы [ 3 ]

42 голосов
/ 06 сентября 2011

ОК, чтобы быть ясно.

Twisted ничего не делает с задачами, связанными с процессором , и по уважительной причине. нет способа ускорить выполнение задачи, связанной с вычислениями, переупорядочив подзадачи; единственное, что вы можете сделать, это добавить больше вычислительных ресурсов; и даже это не сработает в python из-за тонкости его реализации.

Twisted предлагает специальную семантику и обработку цикла событий в случае, если программа « застрянет », ожидая чего-то снаружи, если ее управление; обычно это процесс, выполняющийся на другой машине и взаимодействующий с вашим скрученным процессом по сетевому соединению. Так как вы все равно будете ждать , витая дает вам механизм, позволяющий делать больше вещей за это время. То есть twisted обеспечивает параллелизм для связанных операций ввода-вывода

tl; dr: витой - для сетевого кода. Все остальное просто обычный питон.

8 голосов
/ 06 сентября 2011

Как насчет этого:

c = a + b

Это должно сработать, и это не нужно делать асинхронно (это довольно быстро).

0 голосов
/ 16 декабря 2013

Хороший вопрос, и Twisted (или Python) должен иметь способ, по крайней мере, порождать "a + b" из нескольких ядер (на моем 8-ядерном i7).

К сожалению, Python GIL предотвращает это, что означает, что вам придется ждать не только задачи, связанной с процессором, но и того, чтобы одно ядро ​​выполняло эту работу, в то время как семь других ядер ничего не делают.

Примечание. Возможно, лучшим примером будет «a () + b ()» или даже «fact (sqrt (a () ** b ())» и т. Д., Но важный факт заключается в том, что приведенная выше операция заблокирует одно ядро ​​и GIL в значительной степени мешают Python делать что-либо еще во время этой операции, которая может составлять несколько мс ...

...