[Twisted-Python] Twisted's cfreactor + PyObjC = Asynchronous Networking on OS X

Bob Ippolito bob at redivi.com
Mon Oct 13 18:25:39 EDT 2003

For those of you who don't watch Twisted CVS, cfreactor is officially 
out of the sandbox.  cfreactor is the CoreFoundation integration 
reactor for Twisted ( http://www.twistedmatrix.com/ ), which means that 
you can now seamlessly integrate Cocoa and Twisted (without digging 
around in my sandbox, that is).

If you're running OS X and you'd like to play with cfreactor, check out 
the latest CVS and do a python setup.py install (so that it can build 
twisted/internet/cfsupport.so -- ignore the warnings, they are expected 
for Pyrex modules).  There are two examples provided in 
doc/examples/Cocoa.  You will need PyObjC 1.0 (though it may work with 
earlier betas, you should upgrade if you haven't yet) and MacPython 2.3 
(not tested with Panther yet, but should work).  The next release 
version of Twisted, which is expected very shortly, will include this 
new reactor and updated documentation.  When it is released, it will 
also be available from my Package Manager repository ( 
http://undefined.org/python/pimp/ ).
	SimpleWebClient - Pretty much a straight port of 
doc/examples/qtdemo.py, a very simple app that downloads HTML and puts 
it in a text box.
	WebServicesTool - A Twisted port of b.bum's XML-RPC demo (which is 
included with PyObjC).  For fun, compare how much simpler the Twisted 
version is (since it doesn't need to deal with threads), and how much 
more responsive it feels.

To run either demo, use the buildapp.py script provided in the same 
folder as the application:
	python buildapp.py build

And then:
	open build/ApplicationName.app

Note that when using cfreactor you should *always* call reactor.run() 
while the NSRunLoop is in action (best place to put it is probably in 
your NSApplication delegate's applicationDidFinishLaunching_ method).  
If you're using threads, make sure to only call into Twisted from the 
main runLoop (which is where you have to do your drawing anyways).  And 
of course, you should cfreactor.install() before importing any other 
Twisted modules (see the "Choosing a Reactor and GUI Toolkit 
Integration" HOWTO for more information).


More information about the Twisted-Python mailing list