I'm trying to spawn few processes using the multiprocessing module. However when I call os.getpid() each process returns the same PID as the main calling process.
Why? I'm using Python 2.7 on Ubuntu 14.04.
class Listener(multiprocessing.Process):
def __init__(self, _ttl):
super(Listener, self).__init__()
self.ttl = _ttl
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.bind(('localhost', 0))
def get_pid(self):
return os.getpid()
def get_name(self):
return self.socket.getsockname()
def run(self):
self.socket.listen(1)
time.sleep(self.ttl)
def listen(self):
self.start()
class TestEx1(unittest.TestCase):
def test_address_to_pid(self):
listener1 = Listener(12)
listener2 = Listener(12)
listener3 = Listener(12)
listener1.listen()
listener2.listen()
listener3.listen()
address1 = str(str(listener1.get_name()[0])) + ":" + str(listener1.get_name()[1])
address2 = str(str(listener2.get_name()[0])) + ":" + str(listener2.get_name()[1])
address3 = str(str(listener3.get_name()[0])) + ":" + str(listener3.get_name()[1])
print listener1.get_pid()
print ex1.address_to_pid(address1)
print listener2.get_pid()
print ex1.address_to_pid(address2)
print listener3.get_pid()
print ex1.address_to_pid(address3)
assert(str(ex1.address_to_pid(address1)) == str(listener1.get_pid()))
assert(str(ex1.address_to_pid(address2)) == str(listener2.get_pid()))
assert(str(ex1.address_to_pid(address3)) == str(listener3.get_pid()))
listener2.join()
listener2.join()
listener3.join()