Pythonにはproc1.pyとproc2.pyの2つのファイルがあります。どちらも、1つのプロデューサー、複数のコンシューマーのシナリオの実装です。メインのproc1は、子プロセスを作成します。各子プロセスで、proc2を呼び出します。コード内のproc2は、子プロセスも作成します。proc2.pyは、コマンドラインから実行すると正しく機能します。しかし、proc1から呼び出されると、エラーが発生します
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
オンラインで検索してみましたが、今のところ手がかりがありません。私が間違っていることについてのアイデアはありますか?Proc1.pyは
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()