The Twisted Documentation

VIP免费
2025-02-27 0 0 1.29MB 231 页 5.9玖币
侵权投诉
The Twisted Documentation
The Twisted Development Team
January 9, 2007
Contents
1 Introduction 7
1.1 The Vision For Twisted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 High-Level Overview of Twisted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3 Asynchronous Programming with Twisted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.1 Introduction to concurrent programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.2 Deferreds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3.3 The Problem that Deferreds Solve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3.4 Deferreds - a signal that data is yet to come . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.4 Overview of Twisted Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2 Tutorial 13
2.1 Writing Servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.2 Protocols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.3 Factories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2 Writing Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.2 Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.3 Simple, single-use clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.4 ClientFactory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.5 A Higher-Level Example: ircLogBot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3 Setting up the TwistedQuotes application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.3.1 Goal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.3.2 Setting up the TwistedQuotes project directory . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.4 Designing Twisted Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.4.1 Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.4.2 Example of a modular design: TwistedQuotes . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.5 Twisted from Scratch, or The Evolution of Finger . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.5.2 Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.6 The Evolution of Finger: building a simple finger service . . . . . . . . . . . . . . . . . . . . . . . . 25
2.6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.6.2 Refuse Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.6.3 Do Nothing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.6.4 Drop Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.6.5 Read Username, Drop Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.6.6 Read Username, Output Error, Drop Connections . . . . . . . . . . . . . . . . . . . . . . . . 27
2.6.7 Output From Empty Factory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.6.8 Output from Non-empty Factory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.6.9 Use Deferreds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.6.10 Run ’finger’ Locally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.6.11 Read Status from the Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.6.12 Use Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.6.13 twistd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1
CONTENTS
2
2.7 The Evolution of Finger: adding features to the finger service . . . . . . . . . . . . . . . . . . . . . . 30
2.7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.7.2 Setting Message By Local Users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.7.3 Use Services to Make Dependencies Sane . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.7.4 Read Status File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.7.5 Announce on Web, Too . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.7.6 Announce on IRC, Too . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.7.7 Add XML-RPC Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.8 The Evolution of Finger: cleaning up the finger code . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.8.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.8.2 Write Readable Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.9 The Evolution of Finger: moving to a component based architecture . . . . . . . . . . . . . . . . . . 40
2.9.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.9.2 Write Maintainable Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.9.3 Advantages of Latest Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.9.4 Aspect-Oriented Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.10 The Evolution of Finger: pluggable backends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.10.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.10.2 Another Back-end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.10.3 Yet Another Back-end: Doing the Standard Thing . . . . . . . . . . . . . . . . . . . . . . . . 55
2.11 The Evolution of Finger: a web frontend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.11.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.12 The Evolution of Finger: Twisted client support using Perspective Broker . . . . . . . . . . . . . . . 65
2.12.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
2.12.2 Use Perspective Broker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
2.13 The Evolution of Finger: using a single factory for multiple protocols . . . . . . . . . . . . . . . . . 71
2.13.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
2.13.2 Support HTTPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
2.14 The Evolution of Finger: a Twisted finger client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
2.14.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
2.14.2 Finger Proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
2.15 The Evolution of Finger: making a finger library . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
2.15.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
2.15.2 Organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
2.15.3 Easy Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
2.16 The Evolution of Finger: configuration and packaging of the finger service . . . . . . . . . . . . . . . 81
2.16.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
2.16.2 Plugins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
2.16.3 OS Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
3 Low-Level Twisted 89
3.1 Reactor Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
3.1.1 Reactor Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
3.1.2 Using the reactor object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
3.2 UDP Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.2.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.2.2 DatagramProtocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.2.3 Connected UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.2.4 Multicast UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
3.2.5 Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
3.3 Using Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
3.3.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
3.3.2 Running Another Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
3.3.3 Writing a ProcessProtocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
3.3.4 Things that can happen to your ProcessProtocol . . . . . . . . . . . . . . . . . . . . . . . . . 94
3.3.5 Things you can do from your ProcessProtocol . . . . . . . . . . . . . . . . . . . . . . . . . . 95
3.3.6 Verbose Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
CONTENTS
3
3.3.7 Doing it the Easy Way . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
3.3.8 Mapping File Descriptors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
3.4 Deferred Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
3.4.1 Callbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
3.4.2 Errbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
3.4.3 Handling either synchronous or asynchronous results . . . . . . . . . . . . . . . . . . . . . . 105
3.4.4 DeferredList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
3.4.5 Class Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
3.4.6 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
3.5 Generating Deferreds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
3.5.1 Class overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
3.5.2 What Deferreds don’t do: make your code asynchronous . . . . . . . . . . . . . . . . . . . . 109
3.5.3 Advanced Processing Chain Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
3.5.4 Returning Deferreds from synchronous functions . . . . . . . . . . . . . . . . . . . . . . . . 110
3.5.5 Integrating blocking code with Twisted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
3.5.6 Possible sources of error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3.6 Deferreds are beautiful! (A Tutorial) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3.6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3.6.2 A simple example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
3.6.3 Errbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
3.6.4 addBoth: the deferred version of finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
3.6.5 addCallbacks: decision making based on previous success or failure . . . . . . . . . . . . . . 124
3.6.6 Hints, tips, common mistakes, and miscellaney . . . . . . . . . . . . . . . . . . . . . . . . . 129
3.6.7 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
3.7 Scheduling tasks for the future . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
3.8 Using Threads in Twisted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
3.8.1 Running code in a thread-safe manner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
3.8.2 Running code in threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
3.8.3 Utility Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
3.8.4 Managing the Thread Pool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
3.9 Choosing a Reactor and GUI Toolkit Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
3.9.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
3.9.2 Reactor Functionality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
3.9.3 General Purpose Reactors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
3.9.4 Platform-Specific Reactors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
3.9.5 GUI Integration Reactors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
3.9.6 Non-Reactor GUI Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
4 High-Level Twisted 139
4.1 The Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
4.1.1 Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
4.1.2 twistd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
4.1.3 tap2deb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
4.1.4 tap2rpm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
4.2 The Twisted Plugin System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
4.2.1 Writing Extensible Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
4.2.2 Extending an Existing Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
4.2.3 Alternate Plugin Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
4.2.4 Plugin Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
4.2.5 Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
4.3 Writing a Twisted Application Plugin for twistd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
4.3.1 Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
4.3.2 A note on .tap files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
4.3.3 Alternatives to TAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
4.3.4 Creating the plugin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
4.3.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
4.4 Components: Interfaces and Adapters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
CONTENTS
4
4.4.1 Interfaces and Components in Twisted code . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
4.5 Cred: Pluggable Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
4.5.1 Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
4.5.2 Cred objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
4.5.3 Responsibilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
4.6 Using the Twisted Application Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
4.6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
4.6.2 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
4.6.3 Using application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
5 Utilities 159
5.1 Using usage.Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
5.1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
5.1.2 Boolean Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
5.1.3 Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
5.1.4 Option Subcommands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
5.1.5 Generic Code For Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
5.1.6 Parsing Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
5.1.7 Post Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
5.2 Logging with twisted.python.log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
5.2.1 Basic usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
5.2.2 Writing log observers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
5.3 DirDBM: Directory-based Storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
5.3.1 dirdbm.DirDBM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
5.3.2 dirdbm.Shelf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
5.4 Using telnet to manipulate a twisted server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
5.5 Writing tests for Twisted code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
5.5.1 Trial basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
5.5.2 Twisted-specific quirks: reactor, Deferreds, callLater . . . . . . . . . . . . . . . . . . . . . . 166
6 Twisted RDBMS support 168
6.1 twisted.enterprise.adbapi: Twisted RDBMS support . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
6.1.1 Abstract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
6.1.2 What you should already know . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
6.1.3 Quick Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
6.1.4 How do I use adbapi? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
6.1.5 Examples of various database adapters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
6.1.6 And that’s it! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
6.2 Twisted Enterprise Row Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
6.2.1 Class Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
6.2.2 Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
6.2.3 Creating Row Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
6.2.4 Relationships Between Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
6.2.5 Duplicate Row Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
6.2.6 Updating Row Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
6.2.7 Deleting Row Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
7 Perspective Broker 173
7.1 Overview of Twisted Spread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
7.1.1 Rationale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
7.2 Introduction to Perspective Broker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
7.2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
7.2.2 Object Roadmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
7.2.3 Things you can Call Remotely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
7.2.4 Things you can Copy Remotely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
7.3 Using Perspective Broker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
7.3.1 Basic Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
摘要:

TheTwistedDocumentationTheTwistedDevelopmentTeamJanuary9,2007Contents1Introduction71.1TheVisionForTwisted..........................................71.2High-LevelOverviewofTwisted.....................................71.3AsynchronousProgrammingwithTwisted................................81.3.1Introduct...

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

共231页,预览5页

还剩页未读, 继续阅读

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

开通VIP享超值会员特权

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