I have a two files in python, proc1.py and proc2.py, Both are implementation of a one-producer, multiple consumer scenario. proc1 in its main creates child processes. In each child process it calls proc2. proc2 in its code also creates child processes. proc2.py works correctly when executed from command line. But when called from proc1, i get the error
Traceback (most recent call last):
File "./proc2.py", line 20, in proc2WorkerFunc
elem = q.get(block = False)
File "/usr/lib64/python2.6/multiprocessing/queues.py", line 103, in get
if not self._poll(block and (deadline-time.time()) or 0.0):
IOError: [Errno 9] Bad file descriptor
I have tried searching online but so far have not got any clue. Any ideas on what i am doing wrong?
Proc1.py is
def workerFunc(q):
while True:
try:
elem = q.get(block = False)
print elem
subprocess.call(["./proc2.py"])
time.sleep(0.5)
except Queue.Empty:
print "Queue is empty"
return
except:
print "Exception happened"
tb = traceback.format_exc()
print tb
return
if __name__ == '__main__':
q = multiprocessing.Queue()
for i in range(1):
q.put('Hello')
num_workers = 1
workers = []
for i in range(num_workers):
qWorker = multiprocessing.Process(target=workerFunc, args=(q,))
qWorker.start()
workers.append(qWorker)
for worker in workers:
worker.join()
print "proc 1 has finished"
proc2.py:
def proc2WorkerFunc(q):
while True:
try:
print q.qsize()
elem = q.get(block = False)
print elem
time.sleep(0.5)
except Queue.Empty:
print "Queue is empty"
return
except:
print "Exception happened"
tb = traceback.format_exc()
print tb
return
if __name__ == '__main__':
proc2Q = multiprocessing.Queue()
for i in range(100):
proc2Q.put('World')
num_workers = 10
workers = []
for i in range(num_workers):
qWorker = multiprocessing.Process(target=proc2WorkerFunc, args=(proc2Q,))
qWorker.start()
workers.append(qWorker)
for worker in workers:
worker.join()
Don’t know for sure, but since it seems you’re running Python 2.6 on a linux machine, and the code is working for me (using a windows machine and Python 2.7.3), you propably run into this bug.
Which python version do you use exactly btw?