Twisted: DeferredList vs collectResults - PullRequest
       55

Twisted: DeferredList vs collectResults

0 голосов
/ 21 февраля 2019

Я пытаюсь создать список Deferred объектов, используя DeferredList или collectResults .Я нашел разные результаты при работе с этими двумя.Я работаю с pymodbus 2.1.0 & Twisted 18.4.0 библиотек.

Ссылка: Я ссылался на эту ссылку Отложенная ссылка - Лаборатория скрученных матриц (18.4.0) .

DeferredList Usecase: Когда я использую DeferreList с consumeErrors=True, вызывается результат обратного вызова Deferred и затем выполняется callback из DeferredList.Если в объекте Deferred имеется какая-либо ошибка, в этом случае errorback из DeferredList не выполняется.

DeferredListCallback Result : Ниже приведен результат DeferredList когда нет доступного устройства Modbus для чтения данных.

INFO:service.TestService: (2019-02-21 15:58:39; TestService.py:21 Reading HRs of Modbus RTU device...)
INFO:__main__: (2019-02-21 15:59:09; Test.py:125 Reading HRs of Modbus RTU device completed successfully.)
INFO:service.TestService: (2019-02-21 15:59:09; TestService.py:32 Reading IRs of Modbus RTU device...)

collectResults Сценарий использования: В случае gatherResults, при успешном вызове всех Deferred объектов обратный вызовgatherResults выполнено.Если при выполнении какого-либо объекта Deferred произошла ошибка, то вызывается ошибка и на консоли выводится stacktrace.

collectResultsErrorback Результат: Ниже приведен результат gatherResults, когдаодин из объектов Deferred пытается прочитать данные с устройства Modbus, которое недоступно.

INFO:service.TestService: (2019-02-21 15:58:39; TestService.py:21 Reading HRs of Modbus RTU device...)
INFO:__main__: (2019-02-21 15:50:38; Test.py:212 Error reading HRs of Modbus RTU device : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.defer.FirstError'>: FirstError[#0, [Failure instance: Traceback: <class 'twisted.internet.defer.TimeoutError'>: (30, 'Deferred')
C:\Users\xxx\AppData\Local\Programs\Python\Python36-32\lib\site-packages\twisted\internet\defer.py:385:timeItOut
C:\Users\xxx\AppData\Local\Programs\Python\Python36-32\lib\site-packages\twisted\internet\defer.py:544:cancel
C:\Users\xxx\AppData\Local\Programs\Python\Python36-32\lib\site-packages\twisted\internet\defer.py:500:errback
C:\Users\xxx\AppData\Local\Programs\Python\Python36-32\lib\site-packages\twisted\internet\defer.py:567:_startRunCallbacks --- <exception caught here> ---     C:\Users\xxx\AppData\Local\Programs\Python\Python36-32\lib\site-packages\twisted\internet\defer.py:653:_runCallbacks
C:\Users\xxx\AppData\Local\Programs\Python\Python36-32\lib\site-packages\twisted\internet\defer.py:394:convertCancelled
C:\Users\xxx\AppData\Local\Programs\Python\Python36-32\lib\site-packages\twisted\internet\defer.py:860:_cancelledToTimedOutError ]]].)

Я не понял внутреннюю реализацию.Почему эти два разных результата в одном и том же сценарии.Что следует использовать, когда?Какая из двух лучших?

Может кто-нибудь дать четкое представление об этом?

...