구문 분석 파이썬 트위스트 프레임 워크 이연 객체 사용의 예

비동기 트위스트에 의존 매우 중요 처리 콜백, 이연의 객체의 해결 인스턴스에 우리 파이썬 트위스트 프레임 워크 Twsited 프레임 워크에서 사용하는 오브젝트를 이연
이연 객체 구조
쌍의 일련의 이연 콜백 체인 조성물은, 각각의 콜백 (콜백)는 에러를 처리하기위한 성공적인 콜백 (errbacks)하는 과정을 포함한다. 처음 두 개의 빈 콜백 체인에 의해 deffereds. 당신이 그것에 콜백을 추가 할 때 항상 쌍으로 추가됩니다. 반환 비동기 처리의 결과는, 지연된 트리거 콜백 체인을 추가하기 시작할 때.
아마도 쉽게 예를 들어, 우선 검토 다음 addCallBack으로 설명하기 :

from twisted.internet.defer import Deferred
 
def myCallback(result):
  print result
 
d = Deferred()
d.addCallback(myCallback)
d.callback("Triggering callback.")

그것은 다음과 같은 결과를 얻을 것이다 실행 :

Triggering callback.

예제는 DEFFERED를 만들고 성공적인 치료에 대한 콜백을 등록하기 위해 다음 addCallBack 방법을 사용합니다. d.callback는 DEFFERED 시작과 호출 체인을 콜백. 콜백 파라미터는 콜백 함수를 수신하는 각 제 연쇄 전달한다.
이 다음 addCallBack, 지점, 나는 그 addErrorback를 추측 할 수 있도록하고 싶습니다 또 다른 오류의 예에서 동일한 모양 :

from twisted.internet.defer import Deferred
 
def myErrback(failure):
  print failure
 
d = Deferred()
d.addErrback(myErrback)
d.errback(ValueError("Triggering errback."))

그것은 다음과 같은 결과를 얻을 것이다 실행 :

[Failure instance: Traceback (failure with no frames): <type 'exceptions.ValueError'>: Triggering errback.]

트위스트 오류가 캡슐화 실패에서 볼 수있다.
이 콜백은 항상 쌍되기 전에 참조가 등록했다고 주목할 가치가있다. d.addCallback 및 d.addErrorback 방법을 사용하는 경우, 우리는 단지 콜백 또는 errback을 추가 한 것 같다. 나머지 절반은 통과를 위해 등록 된 사실이 레벨 콜 쇄의 생성을 완료하기 위해,이 방법은있을 것이다. 콜백 체인은 항상 같은 길이 기억하십시오. 당신은 콜백이 콜백을 지정하고 각각 errback하십시오. D.addCallbacks 방법을 사용할 수 있습니다 :

d = Deferred()
d.addCallbacks(myCallback, myErrback)
d.callback("Triggering callback.")

음 ... 먼저 오늘 여기에 와서.
고급 예는
그런 다음 반응기에, 더 실용적인 관점이어야한다. 예제를 살펴 보자 :

from twisted.internet import reactor, defer
 
class HeadlineRetriever(object):
  def processHeadline(self, headline):
    if len(headline) > 50:
      self.d.errback(Exception("The headline ``%s'' is too long!" % (headline,)))
    else:
      self.d.callback(headline)
 
  def _toHTML(self, result):
    return "<h1>%s</h1>" % (result,)
 
  def getHeadline(self, input):
    self.d = defer.Deferred()
    reactor.callLater(1, self.processHeadline, input)
    self.d.addCallback(self._toHTML)
    return self.d
 
def printData(result):
  print result
  reactor.stop()
 
def printError(failure):
  print failure
  reactor.stop()
 
h = HeadlineRetriever()
d = h.getHeadline("Breaking News: Twisted Takes us to the Moon!")
d.addCallbacks(printData, printError)
 
reactor.run()

제목 그렇지 않으면 HTML 다시 변환됩니다, 오래 오래 오류를 반환합니다 경우, 케이스 및 프로세스에 제목을 받기.

50 개 미만의 자에 의해 주어진 제목은, 다음과 같이 위의 코드가 수행하는 반환됩니다 :

<h1>Breaking News: Twisted Takes us to the Moon!</h1>

그 가치에 주목하고, 타이밍 된 이벤트에 사용할 수있는 반응기 callLater 상기 방법의 사용은, 비동기 요청을 시뮬레이션한다.

우리는 예를 들어 매우 긴 제목을 될 경우 :

h = HeadlineRetriever()
d = h.getHeadline("1234567890"*6)
d.addCallbacks(printData, printError)

그 결과는 충족 될 수

[Failure instance: Traceback (failure with no frames): <type 'exceptions.Exception'>: The headline ``123456789012345678901234567890123456789012345678901234567890'' is too long!]

우리는 프로세스를 트리거지도를 보면 : 그림 삽입 설명 여기
Deferreds의 핵심 포인트

  1. 당신이 그들의 콜백 또는 errback를 호출 할 때 Deferreds가 트리거됩니다;
  2. Deferreds 한 번만 트리거 될 수 있습니다! 당신은 AlreadyCalledError 이상이 발생합니다 여러 번 트리거하려고하면,
  3. Errback 콜백 또는 N 단 예외는 제 1 스테이지 N + 1 errback에 전달 될 것이다. errback 아닌 경우, 처리되지 않은 에러를 발생한다. N 번째 스테이지 콜백 errback 또는 귀환 또는 예외 장애 개체를 발생하는 경우, 즉 후단 콜백의 N + 1으로 처리한다;
  4. 결과는 반환 콜백은 첫 번째 매개 변수로, 다음 단계로 전달됩니다 콜백;
  5. 개체가 실패 들어오는 errback 실수가 아닌 경우, 자동으로 한 번 포장됩니다.
    마지막으로, 내가 좋은 평판 파이썬 수집을 추천 [ 입력합니다 학습 경험, 기술을 학습 고참들이 많다]

, 면접 스킬, 직장 체험 등의 점유율은 더주의 매일, 실제 프로젝트에, 프로그래머 정보를 제로로부터 소개 정보를 준비

파이썬 방법은 학습과 작은 세부 사항에 관심을 지불 할 필요의 일부를 공유하고, 기술의 타이밍을 설명하기

게시 10 개 원래 기사 · 원의 칭찬 0 · 조회수 3948

추천

출처blog.csdn.net/haoxun11/article/details/104886885