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