我在python,proc1.py和proc2.py中有两个文件,两者都是一个生产者,多个消费者场景的实现。 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()
答案 0 :(得分:0)
不确定,但是因为看起来你在linux机器上运行Python 2.6,并且代码对我有用(使用windows机器和Python 2.7.3),你可能遇到{{ 3}}
你使用哪个python版本btw?