python-ping icon indicating copy to clipboard operation
python-ping copied to clipboard

it won't get the right result when use multithread to ping

Open kwanhur opened this issue 11 years ago • 2 comments

make a flag in the header packet and then received data by select.select, we can judge the data whether it's the right one.

kwanhur avatar Nov 19 '13 05:11 kwanhur

The issue is that the reply code is not checked, success is reported on any reply

a start would be to actually check the code:

index 7592db0..2f09a79 100644
--- a/gping.py
+++ b/gping.py
@@ -204,7 +204,12 @@ class GPing:
                 self.pings[packet_id]['delay'] = time_received - time_sent

                 # i'd call that a success
-                self.pings[packet_id]['success'] = True
+                if code == 0:
+                    self.pings[packet_id]['success'] = True
+                else
+                    self.pings[packet_id]['success'] = False
+
+                self.pings[packet_id]['code'] = code

                 # call our callback if we've got one
                 self.pings[packet_id]['callback'](self.pings[packet_id])

patch.txt

roeften avatar Jun 24 '16 21:06 roeften

I met this problem too.

The reason that this happened is "os.getpid()" returns the same number while multithreading. os.getpid() returns different number while multiprocessing.

the way to solve this is replace "my_ID = os.getpid() & 0xFFFF" by "my_ID = threading.current_thread().ident & 0xFFFF"(py3) in do_one() function.

I'll fix this in ping3.py and ask for a merge. before the pull request works, see my branch @ https://github.com/kyan001/python-ping

kyan001 avatar Jul 07 '16 15:07 kyan001