[Twisted-Python] Twistd thread problem

Jan Van Uytven wyvern at crm3.com
Mon May 16 17:50:08 MDT 2005


Hi all,

I coded an SMTP proxy that receives incoming e-mail requests and pushes 
the received e-mail onto a Queue were it is processed by a worker thread 
that finishes by sending the e-mail on to another SMTP server.

The server part of the proxy was written in Twisted, but the worker 
thread uses smtplib to fire off the processed e-mails (I didn't know how 
to use the twisted smtp client in a thread).

When I run the application using twistd -noy <appname>, it works great. 
When I try to daemonize it (twistd -oy <appname>) the server part works, 
but the worker thread doesn't. It creates and then I suspect it 
immediately dies, as no error is returned upon creation. A debug of the 
queue reveals that the thread is not pulling items off it. A debugging 
statement placed at the top of the thread never runs, and the twistd log 
reports nothing wrong. I'm using reactor.callInThread to start the 
worker function.

I tried running twistd --spew -oy <appname> and captured the log it 
produced. I did a filter for anything with 'thread' in it, this is the 
result:

2005/05/16 09:15 PDT [-] function ? in 
/usr/lib/python2.3/site-packages/twisted/python/threadpool.py, line 11
2005/05/16 09:15 PDT [-] function WorkerStop in 
/usr/lib/python2.3/site-packages/twisted/python/threadpool.py, line 23
2005/05/16 09:15 PDT [-] function init in 
/usr/lib/python2.3/site-packages/twisted/python/threadable.py, line 219
2005/05/16 09:15 PDT [-] function ThreadPool in 
/usr/lib/python2.3/site-packages/twisted/python/threadpool.py, line 31
2005/05/16 09:15 PDT [-] function ThreadSafeList in 
/usr/lib/python2.3/site-packages/twisted/python/threadpool.py, line 199
2005/05/16 09:15 PDT [-] function init in 
/usr/lib/python2.3/site-packages/twisted/python/threadable.py, line 219
2005/05/16 09:15 PDT [-] method __init__ of 
twisted.python.threadpool.ThreadPool at -1216569236
2005/05/16 09:15 PDT [-] method start of 
twisted.python.threadpool.ThreadPool at -1216569236
2005/05/16 09:15 PDT [-] method adjustPoolsize of 
twisted.python.threadpool.ThreadPool at -1216569236
2005/05/16 09:15 PDT [-] method _startSomeWorkers of 
twisted.python.threadpool.ThreadPool at -1216569236
2005/05/16 09:15 PDT [-] method callInThread of 
twisted.python.threadpool.ThreadPool at -1216569236
2005/05/16 09:15 PDT [-] method _startSomeWorkers of 
twisted.python.threadpool.ThreadPool at -1216569236
2005/05/16 09:15 PDT [-] method startAWorker of 
twisted.python.threadpool.ThreadPool at -1216569236
2005/05/16 09:15 PDT [-] method __init__ of threading.Thread at -1216568116
2005/05/16 09:15 PDT [-] method __init__ of threading.Thread at -1216568116
2005/05/16 09:15 PDT [-] method _set_daemon of threading.Thread at 
-1216568116
2005/05/16 09:15 PDT [-] function currentThread in 
/usr/lib/python2.3/threading.py, line 669
2005/05/16 09:15 PDT [-] method isDaemon of threading._MainThread at 
-1214935060
2005/05/16 09:15 PDT [-] function Condition in 
/usr/lib/python2.3/threading.py, line 147
2005/05/16 09:15 PDT [-] method __init__ of threading._Condition at 
-1216567604
2005/05/16 09:15 PDT [-] method __init__ of threading._Condition at 
-1216567604
2005/05/16 09:15 PDT [-] method start of threading.Thread at -1216568116
2005/05/16 09:15 PDT [-] method _note of threading.Thread at -1216568116
2005/05/16 09:15 PDT [-] method run of threading.Thread at -1216568116
2005/05/16 09:15 PDT [-] method _worker of 
twisted.python.threadpool.ThreadPool at -1216569236
2005/05/16 09:15 PDT [-] function currentThread in 
/usr/lib/python2.3/threading.py, line 669
2005/05/16 09:15 PDT [-] function threadMailer in twisted-copyuser.py, 
line 201
2005/05/16 09:15 PDT [-] method acquire of 
twisted.python.threadable._XLock at -1216639284
2005/05/16 09:15 PDT [-] method release of 
twisted.python.threadable._XLock at -1216639284
2005/05/16 09:15 PDT [-] method acquire of 
twisted.python.threadable._XLock at -1216639284
2005/05/16 09:15 PDT [-] method release of 
twisted.python.threadable._XLock at -1216639284
2005/05/16 09:15 PDT [-] method acquire of 
twisted.python.threadable._XLock at -1216639284
2005/05/16 09:15 PDT [-] method release of 
twisted.python.threadable._XLock at -1216639284
2005/05/16 09:15 PDT [-] function registerAsIOThread in 
/usr/lib/python2.3/site-packages/twisted/python/threadable.py, line 262

Why would the worker thread act differently with twistd daemonized? Any 
suggestions, advice, or hints would be welcome.

Thanks,

Jan

-- 
Jan Van Uytven
Computer Systems & Network Engineer
Convergent Media Network
wyvern at crm3.com

Only in silence the word,
only in dark the light,
only in dying life:
Bright the hawk's flight 
on the empty sky.

- Ursula K. LeGuin, 'A Wizard of Earthsea'

*** LEGAL STUFF ***
This electronic message transmission, including any attached files, 
contains information which may be confidential and/or privileged.
The information is intended to be for the SOLE use of the individual or 
entity named above. If you are not the intended recipient, be aware 
that any review, disclosure, copying, distribution or use of the 
contents of this information is prohibited. This message is not to be 
forwarded for any reason without prior consent of the sender. 

If you have received this electronic transmission in error, please 
notify the sender immediately by telephone (250) 386-4266 or by a 
'reply to sender' only message and destroy all electronic and hard 
copies of the communication, including attachments, without reading 
or saving in any manner.





More information about the Twisted-Python mailing list