The Twisted Documentation-20120213

VIP免费
2025-02-27 0 0 1.35MB 260 页 5.9玖币
侵权投诉
The Twisted Documentation
The Twisted Development Team
February 13, 2012
Contents
1 Introduction 7
1.1 The Vision For Twisted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2 Getting Started 8
2.1 Writing Servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.2 Protocols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.3 Factories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1.4 Putting it All Together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Writing Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.2 Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.3 Simple, single-use clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.4 ClientFactory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.5 A Higher-Level Example: ircLogBot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.6 Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3 Test-driven development with Twisted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3.1 Introductory example of Python unit testing . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3.2 Creating an API and writing tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3.3 Making the tests pass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.3.4 Twisted specific testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.3.5 Testing a protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.3.6 More good pratices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.3.7 Resolve a bug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.3.8 Code coverage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.3.9 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.4 Twisted from Scratch, or The Evolution of Finger . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.4.2 Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.5 The Evolution of Finger: building a simple finger service . . . . . . . . . . . . . . . . . . . . . . . . 41
2.5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.5.2 Refuse Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.5.3 Do Nothing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.5.4 Drop Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.5.5 Read Username, Drop Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.5.6 Read Username, Output Error, Drop Connections . . . . . . . . . . . . . . . . . . . . . . . . 43
2.5.7 Output From Empty Factory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.5.8 Output from Non-empty Factory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.5.9 Use Deferreds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.5.10 Run ’finger’ Locally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.5.11 Read Status from the Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.5.12 Use Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
2.5.13 twistd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
2.6 The Evolution of Finger: adding features to the finger service . . . . . . . . . . . . . . . . . . . . . . 48
2.6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
1
CONTENTS
2
2.6.2 Setting Message By Local Users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.6.3 Use Services to Make Dependencies Sane . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
2.6.4 Read Status File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.6.5 Announce on Web, Too . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2.6.6 Announce on IRC, Too . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
2.6.7 Add XML-RPC Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
2.7 The Evolution of Finger: cleaning up the finger code . . . . . . . . . . . . . . . . . . . . . . . . . . 58
2.7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
2.7.2 Write Readable Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
2.8 The Evolution of Finger: moving to a component based architecture . . . . . . . . . . . . . . . . . . 61
2.8.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.8.2 Write Maintainable Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.8.3 Advantages of Latest Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.8.4 Aspect-Oriented Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
2.9 The Evolution of Finger: pluggable backends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
2.9.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
2.9.2 Another Back-end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
2.9.3 Yet Another Back-end: Doing the Standard Thing . . . . . . . . . . . . . . . . . . . . . . . . 77
2.10 The Evolution of Finger: a web frontend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
2.10.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
2.11 The Evolution of Finger: Twisted client support using Perspective Broker . . . . . . . . . . . . . . . 89
2.11.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
2.11.2 Use Perspective Broker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
2.12 The Evolution of Finger: using a single factory for multiple protocols . . . . . . . . . . . . . . . . . 95
2.12.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
2.12.2 Support HTTPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
2.13 The Evolution of Finger: a Twisted finger client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
2.13.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
2.13.2 Finger Proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
2.14 The Evolution of Finger: making a finger library . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
2.14.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
2.14.2 Organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
2.14.3 Easy Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
2.15 The Evolution of Finger: configuration and packaging of the finger service . . . . . . . . . . . . . . . 106
2.15.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
2.15.2 Plugins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
2.15.3 OS Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
2.16 Setting up the TwistedQuotes application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
2.16.1 Goal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
2.16.2 Setting up the TwistedQuotes project directory . . . . . . . . . . . . . . . . . . . . . . . . . 114
2.17 Designing Twisted Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
2.17.1 Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
2.17.2 Example of a modular design: TwistedQuotes . . . . . . . . . . . . . . . . . . . . . . . . . . 116
3 Networking and Other Event Sources 119
3.1 Overview of Twisted Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
3.2 Reactor Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
3.2.1 Reactor Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
3.2.2 Using the reactor object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
3.3 Using SSL in Twisted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
3.3.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
3.3.2 SSL echo server and client without client authentication . . . . . . . . . . . . . . . . . . . . 121
3.3.3 Using startTLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
3.3.4 Client authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
3.3.5 Other facilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
3.3.6 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
3.4 UDP Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
CONTENTS
3
3.4.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
3.4.2 DatagramProtocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
3.4.3 Connected UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
3.4.4 Multicast UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
3.5 Using Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
3.5.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
3.5.2 Running Another Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
3.5.3 Writing a ProcessProtocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
3.5.4 Things that can happen to your ProcessProtocol . . . . . . . . . . . . . . . . . . . . . . . . . 130
3.5.5 Things you can do from your ProcessProtocol . . . . . . . . . . . . . . . . . . . . . . . . . . 130
3.5.6 Verbose Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
3.5.7 Doing it the Easy Way . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
3.5.8 Mapping File Descriptors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
3.6 Deferred Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
3.6.1 Deferreds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
3.6.2 Callbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
3.6.3 Errbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
3.6.4 Handling either synchronous or asynchronous results . . . . . . . . . . . . . . . . . . . . . . 141
3.6.5 DeferredList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
3.6.6 Class Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
3.6.7 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
3.7 Generating Deferreds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
3.7.1 Class overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
3.7.2 What Deferreds don’t do: make your code asynchronous . . . . . . . . . . . . . . . . . . . . 146
3.7.3 Advanced Processing Chain Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
3.7.4 Returning Deferreds from synchronous functions . . . . . . . . . . . . . . . . . . . . . . . . 147
3.7.5 Integrating blocking code with Twisted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
3.7.6 Possible sources of error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
3.8 Scheduling tasks for the future . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
3.9 Using Threads in Twisted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
3.9.1 Running code in a thread-safe manner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
3.9.2 Running code in threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
3.9.3 Utility Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
3.9.4 Managing the Thread Pool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
3.10 Producers and Consumers: Efficient High-Volume Streaming . . . . . . . . . . . . . . . . . . . . . . 152
3.10.1 Push Producers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
3.10.2 Pull Producers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
3.10.3 Consumers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
3.10.4 Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
3.11 Choosing a Reactor and GUI Toolkit Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
3.11.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
3.11.2 Reactor Functionality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
3.11.3 General Purpose Reactors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
3.11.4 Platform-Specific Reactors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
3.11.5 GUI Integration Reactors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
3.11.6 Non-Reactor GUI Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
4 High-Level Infrastructure 158
4.1 Getting Connected with Endpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
4.1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
4.1.2 Constructing and Using Endpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
4.1.3 Maximizing the Return on your Endpoint Investment . . . . . . . . . . . . . . . . . . . . . . 159
4.2 Components: Interfaces and Adapters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
4.2.1 Interfaces and Components in Twisted code . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
4.3 Cred: Pluggable Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
4.3.1 Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
4.3.2 Cred objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
CONTENTS
4
4.3.3 Responsibilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
4.3.4 Cred plugins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
4.3.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
4.4 The Twisted Plugin System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
4.4.1 Writing Extensible Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
4.4.2 Extending an Existing Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
4.4.3 Alternate Plugin Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
4.4.4 Plugin Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
4.4.5 Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
5 Deploying Twisted Applications 175
5.1 The Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
5.1.1 Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
5.1.2 twistd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
5.1.3 OS Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
5.2 Using the Twisted Application Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
5.2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
5.2.2 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
5.2.3 Using application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
5.3 Writing a twistd Plugin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
5.3.1 Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
5.3.2 Alternatives to twistd plugins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
5.3.3 Creating the plugin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
5.3.4 Using cred with your TAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
5.3.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
6 Utilities 183
6.1 Logging with twisted.python.log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
6.1.1 Basic usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
6.1.2 Writing log observers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
6.1.3 Customizing twistd logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
6.2 Symbolic Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
6.2.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
6.2.2 Constant Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
6.2.3 Constants With Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
6.3 twisted.enterprise.adbapi: Twisted RDBMS support . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
6.3.1 Abstract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
6.3.2 What you should already know . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
6.3.3 Quick Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
6.3.4 How do I use adbapi? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
6.3.5 Examples of various database adapters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
6.3.6 And that’s it! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
6.4 Parsing command-lines with usage.Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
6.4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
6.4.2 Boolean Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
6.4.3 Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
6.4.4 Option Subcommands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
6.4.5 Generic Code For Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
6.4.6 Parsing Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
6.4.7 Post Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
6.4.8 Type enforcement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
6.4.9 Shell tab-completion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
6.5 DirDBM: Directory-based Storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
6.5.1 dirdbm.DirDBM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
6.5.2 dirdbm.Shelf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
6.6 Writing tests for Twisted code using Trial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
6.6.1 Trial basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
摘要:

TheTwistedDocumentationTheTwistedDevelopmentTeamFebruary13,2012Contents1Introduction71.1TheVisionForTwisted..........................................72GettingStarted82.1WritingServers..............................................82.1.1Overview.............................................82.1.2Protoc...

展开>> 收起<<
The Twisted Documentation-20120213.pdf

共260页,预览5页

还剩页未读, 继续阅读

声明:本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。玖贝云文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知玖贝云文库,我们立即给予删除!
分类:计算机 价格:5.9玖币 属性:260 页 大小:1.35MB 格式:PDF 时间:2025-02-27

开通VIP享超值会员特权

  • 多端同步记录
  • 高速下载文档
  • 免费文档工具
  • 分享文档赚钱
  • 每日登录抽奖
  • 优质衍生服务
/ 260
客服
关注