asynchronous comunication, wxPython and threads.

Zunbeltz Izaola zunbeltz at gmail.com
Wed Jun 22 04:10:38 EDT 2005


On Tue, 21 Jun 2005 11:07:35 -0400, Peter Hansen wrote:

> 
> Please clarify: what does this mean?  "Sending a socket" is not a usual 
> way to describe TCP communications.  Do you mean your program _opens_ a 
> socket (like a phone connection) and _sends_ some data, then waits for 
> data to be received from the other end?  Or are you (as it almost 
> sounds) opening and closing sockets repeatedly for each part of the 
> conversation?
>

Sorry for the lack of clarity. I opened the socket once (i don't know if
itit is important to open inside or outside the comunication thread). And
them send "packages" and wait for data.

 
> 
> I think you are using the term "socket" where you should be using 
> "packet".  A socket is the virtual connection created by TCP.  A packet 
> is either a single blob of data sent by the TCP code in the operating 
> system, or perhaps a single chunk of your own data.
> 

Thanks for the vocabulary correction.

> If you are using a single TCP socket to send multiple packets, and you 
> are talking about those packets being sent out of order, it's very 
> unlikely and there must be another explanation.  TCP _is_ reliable, and 
> you will not get data out of order unless you do something to screw 
> things up, for example by creating a race condition by doing 
> multithreaded code incorrectly.
> 

I think this is the case (see the post of Toby). I didn't try it out but I
think the problem is that i *do* comunication in both threads.

> 
> Some people advise that, but there's really nothing *wrong* with doing 
> this in a second thread, and in fact I do similar things all the time 
> with no ill effects.  While async frameworks _can_ make this easier, 
> they could also make it harder (at least for a while) as you adjust your 
> brain to the new approach.  Furthermore, at least in the case of 
> wxPython and Twisted (on Windows) there can be problems integrating the 
> two loops.  I don't believe the latest Twisted claims to have fully 
> solved the problems involved yet, so you might still be required to have 
> a second thread for the TCP stuff.
> 

Yes, i have read that there is problems yet.

> 
> I use a non-blocking socket and select() calls in my thread, and 
> communicate with the GUI thread using appropriate Queue objects and 
> calls to PostEvent() (or CallAfter()) on the wx side of things.  It's 
> pretty straightforward, so if you post a small piece of your application 
> which reproduces the problem it shouldn't be hard for someone here to 
> help you fix it.
> 

Thanks. First i would check if the problem is what Toby says.

> 
> No more so than using threads, unless your problem is caused by the
> threads themselves (as I suggested above) in which case it might be
> easier to just fix the problem.
> 
> -Peter

Thank you very much

Zunbeltz




More information about the Python-list mailing list