Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: third_party/twisted_8_1/twisted/flow/flow.py

Issue 12261012: Remove third_party/twisted_8_1 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 # Copyright (c) 2001-2004 Twisted Matrix Laboratories.
2 # See LICENSE for details.
3
4 #
5 # Author: Clark Evans (cce@clarkevans.com)
6 #
7
8 """
9 flow -- asynchronous data flows using generators
10
11 This module provides a mechanism for using async data flows through the use of
12 generators. The basic idea of flow is that when ever you require data from a
13 producer, you yield the producer. If the producer is ready, then you can call
14 producer.next() to fetch the incoming data. Otherwise, the underlying
15 controller will suspend the operation to try again later.
16
17 For example, here is a simple 'printer' which consumes items from its source by
18 printing them. Note that to get a new item, it first yields the data source
19 and then calls source.next()::
20
21 from __future__ import generators
22 from twisted.flow import flow
23 from twisted.internet import reactor, defer
24
25 def printer(source):
26 source = flow.wrap(source)
27 while True:
28 yield source
29 print source.next()
30
31 someFlowSource = [\"one\", flow.Cooperate(1), \"two\"]
32
33 d = flow.Deferred(printer(someFlowSource))
34 d.addCallback(lambda _: reactor.stop())
35 reactor.run()
36
37 In the example above, there are three objects imported from the flow module::
38
39 - flow.wrap converts many data sources such as lists, generators, and
40 deferreds, into a special instruction object, a Stage. In this case, a
41 simple list is wrapped.
42
43 - flow.Deferred is a flow Controller which executes the stage passed to it,
44 aggregating all results into a list which is passed to the deferred's
45 callback. In this case, the result list is empty, but the callback is
46 used to stop the reactor after the printing has finished.
47
48 - flow.Cooperate is a special instruction object which is used by the flow
49 Controller. In this case, the the flow pauses for one second between \"one \"
50 and \"two\".
51
52
53 Most classes in the flow module an Instruction, either a CallLater or a Stage.
54 A Stage instruction is used to wrap various sorts of producers, anything from a
55 simple string to Callback functions. Some stages can be constructed directly,
56 such as Zip, Concurrent, Merge, Callback, or Threaded. But in most cases, in
57 particular _String, _List, _Iterable, and _Deferred, state construction is
58 handled through the wrap function. Stages can yield other stages to build a
59 processing chain, results which are returned to the previous stage, or a
60 CallLater instruction which causes the whole operation to be suspended.
61
62
63 Typically, the CallLater instructions as passed up the call stack till the top
64 level, or Controller. The controller then typically returns control, but
65 registers itself to be called later. Once called again, the controller sets up
66 the call stack and resumes the top level generator. There is a special
67 CallLater, Cooperate, which simply resumes the chain of stages at a later time.
68 Some stages, Callback, _Deferred, and Threaded have their own special CallLater
69 which handles the process of resuming flow for their specific case.
70
71 The inheritence hierarchy defined here looks like this::
72
73 Instruction
74 CallLater
75 Cooperate
76 Stage
77 # private stages (use flow.wrap)
78 _String
79 _List
80 _Iterable
81 _Deferred
82 # public stages
83 Map
84 Zip
85 Concurrent
86 Merge
87 Block
88 Callback*
89 Threaded*
90 Controller
91 Deferred
92 Block
93 Protocol
94
95 """
96
97 from twisted.flow.base import *
98 from twisted.flow.stage import *
99 from twisted.flow.pipe import *
100 from twisted.flow.wrap import wrap
101 from twisted.flow.controller import Deferred, Block
102 from twisted.flow.protocol import makeProtocol, Protocol
OLDNEW
« no previous file with comments | « third_party/twisted_8_1/twisted/flow/controller.py ('k') | third_party/twisted_8_1/twisted/flow/pipe.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698