[Python-Dev] threadsafe patch for asynchat

Mark Edgington edgimar at lycos.com
Sun Feb 5 22:26:48 CET 2006


Does anyone have any comments about applying the following patch to 
asynchat?  It should not affect the behavior of the module in any way 
for those who do not want to use the feature provided by the patch.  The 
point of the patch is to make it easy to use asynchat in a multithreaded 
application.  Maybe I am missing something, and the patch really doesn't 
make it threadsafe?  Any comments would be appreciated.  Also, if it 
looks good to everyone, feel free to use it.

-------BEGIN PATCH----------
--- asynchat.py    Fri Oct 15 03:03:16 2004
+++ asynchat.py.new    Sun Feb 05 22:05:42 2006
@@ -59,10 +59,11 @@
     ac_in_buffer_size       = 4096
     ac_out_buffer_size      = 4096
 
-    def __init__ (self, conn=None):
+    def __init__ (self, conn=None, running_in_thread=False):
         self.ac_in_buffer = ''
         self.ac_out_buffer = ''
         self.producer_fifo = fifo()
+        self.running_in_thread = runnning_in_thread
         asyncore.dispatcher.__init__ (self, conn)
 
     def collect_incoming_data(self, data):
@@ -157,7 +158,9 @@
 
     def push (self, data):
         self.producer_fifo.push (simple_producer (data))
-        self.initiate_send()
+        # only initiate a send if not running in a threaded 
environment, since
+        # initiate_send() is not threadsafe.
+        if not self.running_in_thread: self.initiate_send()
 
     def push_with_producer (self, producer):
         self.producer_fifo.push (producer)
-------END PATCH----------

-Mark



More information about the Python-Dev mailing list