我有一个IPython笔记本,我作为多线程运行,并且已经转换为尝试在多个处理器上运行。除非有人认为查看其中的特定部分会有所帮助,否则我将不会引用大量代码。它的要点是我试图在PyOpenCL周围包装一个负载平衡器,所以我需要提供多个独立的队列 - 部分是为了解决一个特定的问题(粒子模拟),部分是为了学习练习。
在任何时候我都没有故意打开任何文件,但它却因此错误而崩溃:
Traceback (most recent call last):
File "//anaconda/lib/python3.4/site-packages/IPython/core/interactiveshell.py", line 3035, in run_code
File "<ipython-input-23-d29c87aba720>", line 1, in <module>
co.convergeStep(mags[3])
File "<ipython-input-17-0eac43f0bbbf>", line 62, in convergeStep
evt=self.nlb.qTask(evtList,(b,k),b.forces,k,out=b.forceAccum,out2=k.forceAccum,sum=True)
File "<ipython-input-13-0f26b8ae660e>", line 36, in qTask
t=StagingThread(waitlist,c,self.pool)
File "<ipython-input-10-549b980aea87>", line 7, in __init__
self.killme=mp.Event()
File "//anaconda/lib/python3.4/multiprocessing/context.py", line 91, in Event
File "//anaconda/lib/python3.4/multiprocessing/synchronize.py", line 336, in __init__
File "//anaconda/lib/python3.4/multiprocessing/context.py", line 76, in Condition
File "//anaconda/lib/python3.4/multiprocessing/synchronize.py", line 215, in __init__
File "//anaconda/lib/python3.4/multiprocessing/context.py", line 81, in Semaphore
File "//anaconda/lib/python3.4/multiprocessing/synchronize.py", line 127, in __init__
File "//anaconda/lib/python3.4/multiprocessing/synchronize.py", line 60, in
__init__ OSError: [Errno 24] Too many open files
我在考虑的背景中是否有打开文件的东西?
看起来我在失败时产生了11个进程。我在OS X 10.10.3,Python 3.4.3,IPython 3.1下运行。我没有使用multiprocessing.Pool(至少不是故意的)。看起来事件中发生了失败?在处理这个问题时还会出现其他异常,但它们主要是太多的文件错误,然后是一些回溯失败以及其他看起来像上述其中一个的结果......