threads and socket question

Gonçalo Rodrigues op73418 at mail.telepac.pt
Tue Sep 2 09:59:55 EDT 2003


On Mon, 01 Sep 2003 01:34:32 GMT, "Daniel T."
<postmaster at earthlink.net> wrote:

>Gon?alo Rodrigues <op73418 at mail.telepac.pt> wrote:
>
>> My setup is the following: I have socket s from which I want to read
>> and write. So I made the following set up:
>> 
>> There is a thread whose only job is to read. Any data read (from recv
>> call) is just passed to (some) Queue. This thread is "owned" by a
>> second thread waiting on a Queue for write requests. The thread just
>> pops these from the Queue, and calls the send method from the socket.
>> This thread also takes care of closing the socket or (possibly)
>> handling any exceptions raised due to socket operation. 
>> 
>> So my question is: since I have two threads sharing the same socket,
>> even though one is only reading and the other does everything else, do
>> I have to watch out for any "concurrency" issues?
>> 
>> P.S: This is for learning experience. So it's of no use telling me
>> that I should learn Twisted :-) I may (eventually) get there, but at
>> the moment I feel more omfortable with working with plain blocking
>> sockets.
>
>The first problem I can think of is the one that stopped me. Note the 
>code below... You can't close a blocked socket in python even from a 
>separate thread.
>

Thanks for this piece of info. My experiences with my setup confirm
it. 

I really want to keep the socket-closing in the write thread so my
problem is reduced to be able to order to read thread to die. What I
chose to do is to have it periodically check some exit flag to know
when to exit. I believe this can be done by calling select with a
timeout before the recv blocking call. Back to the docs and
Python-experimenting-mode.

With my best regards,
G. Rodrigues




More information about the Python-list mailing list