On 12/23/2016 01:56 PM, Charles Hixson wrote:
I was looking to avoid using a upd connection to transfer messages
between processes, so I thought I'd use multiprocessing (which I
expect would be faster), but...I sure would appreciate an explanation
of this problem.
When I run the code (below) instead of messages receiving messages
from the correct process I get:
(where the first number of a line identifies the index assigned to the
process.)
waiting for completion
The receiving process should be the one sent to.
receiving sending sent to
ndx process name process
name ndx
1=Process-2 received: at time 0.001243: Process-1 says Hi to 0
0=Process-1 received: at time 0.001211: Process-2 says Hi to 1
0=Process-1 received: at time 0.001144: Process-3 says Hi to 2
4=Process-5 received: at time 0.002324: Process-1 says Hi to 0
0=Process-1 received: at time 0.000953: Process-4 says Hi to 3
0=Process-1 received: at time 0.000674: Process-5 says Hi to 4
3=Process-4 received: at time 0.002114: Process-1 says Hi to 0
3=Process-4 received: at time 0.001864: Process-2 says Hi to 1
4=Process-5 received: at time 0.002094: Process-2 says Hi to 1
2=Process-3 received: at time 0.001711: Process-1 says Hi to 0
4=Process-5 received: at time 0.001885: Process-3 says Hi to 2
4=Process-5 received: at time 0.001586: Process-4 says Hi to 3
1=Process-2 received: at time 0.001456: Process-3 says Hi to 2
3=Process-4 received: at time 0.001734: Process-3 says Hi to 2
2=Process-3 received: at time 0.00158: Process-2 says Hi to 1
2=Process-3 received: at time 0.001444: Process-4 says Hi to 3
2=Process-3 received: at time 0.001088: Process-5 says Hi to 4
3=Process-4 received: at time 0.001221: Process-5 says Hi to 4
1=Process-2 received: at time 0.001212: Process-4 says Hi to 3
1=Process-2 received: at time 0.000885: Process-5 says Hi to 4
## Test multiprocessing queues
import multiprocessing as mp
import time
from multiprocessing import Process
from multiprocessing import Queue
from queue import Empty
from queue import Full
from random import random
class TestMPQ:
""" Class doc """
def __init__ (self, ndx):
""" Class initialiser """
self.name = mp.current_process().name
self.ndx = ndx
def sendHi (self):
for i in range(5):
if i != self.ndx:
qs[i].put ("{} says Hi to {}".format(self.name,
self.ndx))
def processHi (self):
while (True):
time.sleep(random() + 0.001)
try:
msg = qs[self.ndx].get_nowait()
print ("{}={} received: {}".format(self.ndx,
self.name, msg) )
except Empty:
break
except Exception as ex:
print ("Exception: ", repr(ex))
break
def procHandler (ndx, qs):
p = TestMPQ(ndx)
p.sendHi()
p.processHi()
if "__main__" == __name__:
qs = []
for i in range(5):
qs.append(Queue())
ps = []
for i in range(5):
ps.append(Process(target = procHandler, args = (i, qs) ) )
ps[i].start()
print ("waiting for completion")
for i in range(5):
ps[i].join()
--
https://mail.python.org/mailman/listinfo/python-list