[Baypiggies] Advice on multithreading socket architecture in Python

Braun Brelin bbrelin at gmail.com
Wed Apr 13 06:33:45 EDT 2016


Thanks to all who responded.  It was  very helpful.

Braun Brelin


On Thu, Apr 7, 2016 at 11:12 PM, Fahrzin Hemmati <fahhem at google.com> wrote:

> What are you using to send data to these two threads? Most mechanisms
> support a timeout-based read, so you could put the heartbeat limit as the
> timeout and send a heartbeat. Here's an example that uses Queue()s:
>
> class SocketThreadForHardware(threading.Thread):
>   def __init__(self, connection_info):
>>     self.socket = socket.socket(…)
>     self.write_queue = Queue.Queue()
>     # I'm ignoring read/recv here
>
>   def write(self, data):
>     self.write_queue.put(data)
>
>   def run(self):
>     while True:
>         try:
>           data = self.write_queue.get(block=True,
> timeout=HEARTBEAT_TIMEOUT_S)
>         except Queue.Empty:
>           data = HEARTBEAT
>         self.socket.write(data)
>
>
> On Thu, Apr 7, 2016 4:44 AM, Braun Brelin bbrelin at gmail.com wrote:
>
>> Hi all,
>>
>> I could use some advice on a program I'm writing in Python 3.
>>
>> Basically, I have a hardware device which supports two socket
>> connections. I was planning on creating threads to do reads and writes to
>> each socket as necessary.  However, the hardware device will close the
>> socket connection after 120 seconds of inactivity so I need to send a
>> heartbeat message to the sockets in order to keep them open.
>>
>> I'm trying to figure out the best way to do this.  My initial thought was
>> to create four threads, one for the 'control', i.e. send the heartbeat and
>> one for 'data'.  Basically similar to how ftp works with TCP ports 20 and
>> 21.
>>
>> This seems clunky, however. Since I now have to implement locking for
>> each socket as well as having four threads rather than two.
>>
>> Is there a good way of having the threads become daemons, and somehow
>> check to see if they've sent any data over some preset timeout value and if
>> not, send a heartbeat to the socket?
>>
>> Thanks
>>
>> Braun Brelin
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/baypiggies/attachments/20160413/5c7eb6b8/attachment.html>


More information about the Baypiggies mailing list