对于搜索,错误消息是:
此应用程序正在从后台线程修改autolayout引擎,这可能导致引擎损坏和奇怪的崩溃.这将在将来的版本中导致异常.
我知道这意味着从后台线程调用一些UIKit代码,我知道解决方案是将代码包装进去
dispatch_async(dispatch_get_main_queue(), ^(void){ <code> });
我的问题是找到这样做的地方,因为没有任何打印的堆栈跟踪引用我的应用程序代码.我证明这是否定的证据是在调试输出窗口中搜索(命令-f)我的应用程序的名称; 我有24个堆栈跟踪被丢弃,我的应用程序名称不在其中任何一个,除了顶部有错误消息.我可以发布其中一个,但这似乎没有用.
在我今天工作的情况下,在转换视图控制器viewWillDisappear()
之前和之后都会发生这种情况viewWillAppear()
.我发现我的部分代码要包装dispatch_async()
,但现在都处理完了.我有断点和调试消息,其中分配和取消分配与视图控制器相关的对象,并且它们都在异常消息出现后触发.在调试和发布模式下,模拟器和我的iOS9 iPhone都会发生这种情况.
如何识别显然修改UI的后台代码?
概述是我正在编写代码来理解我的问题空间,并且我遇到了'PANIC:调用Lua API(内存不足)时出现无保护错误'错误.我正在寻找绕过这个限制的方法.
环境底线是Torch,一个在LuaJIT上运行的科学计算框架,LuaJIT在Lua上运行.我需要Torch,因为我最终想要在GPU上使用神经网络来解决我的问题,但为了实现这一目标,我需要很好地表达问题以提供给网络.我(卡住)在Centos Linux上,我怀疑尝试从32位模式重建源代码(据报道将LuaJIT内存限制扩展到4gb)将是一个噩梦,如果它适用于所有的库.
问题空间本身可能不是特别相关,但总的来说,我有点数据文件,我计算这些距离之间的距离然后bin(即直方图)这些距离试图找出最有用的范围.方便的是,我可以创建复杂的Lua表,其中包含各种箱子和torch.save(),这些都是数不清的,然后在以后拿起并检查不同的标准化等等 - 所以经过一个月的游戏后我发现这是真的很容易和强大.
我可以使它看起来最多3个距离,每个15个容器(15x15x15加上开销),但这只是通过添加显式的garbagecollection()调用并使用fork()/ wait()为每个数据文件,以便外部循环将保持运行,如果一个数据文件(几千)仍然打破内存限制并使孩子崩溃.当每个成功的子进程现在必须读取,修改和写入当前的bin计数集时,这会变得非常痛苦 - 我最大的文件目前是36mb.我想要更大(更多的垃圾箱),并且真的更愿意只持有15个我无法访问的RAM的计数.
所以,这里有一些我想过的路径; 如果你能确认/否认他们中的任何一个会/不会让我超出1gb边界,或者只是提高我的效率,请发表评论.如果您可以提出我没想过的其他方法,请发表评论.
我错过了一个触发Lua进程的方法,我可以从中读取任意表格吗?毫无疑问,我可以将我的问题分解成更小的部分,但是从stdio解析返回表(从系统调用到另一个Lua脚本)似乎容易出错,而写入/读取小型中间文件将是很多磁盘i/o.
我错过了一个存储和访问表高内存模块?这似乎是我真正想要的,但还没有找到它
FFI C数据结构可以放在1gb之外吗?看起来似乎并非如此,但我当然缺乏对造成限制的原因的全面理解.我怀疑这会让我比普通的Lua表更能提高效率,因为这些表已经超越原型设计了吗?(除非我为每个更改做了一堆编码)
当然我可以通过在C中写一个扩展来解决(Torch似乎支持超出限制的网络),但是我的简短调查发现了对'lightuserdata'指针的引用 - 这是否意味着更正常的扩展赢了也不到1gb以外?这看起来似乎也应该是原型制作练习的开发成本.
我很了解C,所以走FFI或扩展路线并没有打扰我 - 但我从经验中知道,以这种方式封装算法既可以非常优雅,又可以通过两个地方来隐藏错误.处理包含堆栈中表格中的表格的数据结构似乎也不是很好.在我做出这些努力之前,我想确定最终结果真的能解决我的问题.
感谢阅读长篇文章.
我已经开发了 biopython 代码,我想通过添加 .pxd 文件并使用 cython 编译来加速我自己的应用程序。在此过程中,我添加了类型提示,因为我认为这将是一个改进(实际上我希望 cython 会自动使用它们,但事实并非如此)。现在我发现类型提示代码与我想要的 cython 增强不兼容。例如,采用cython numpy 教程中的 convolve_py.py 示例:
def naive_convolve(f, g):
Run Code Online (Sandbox Code Playgroud)
更改为:
def naive_convolve(f: np.ndarray, g: np.ndarray) -> np.ndarray:
Run Code Online (Sandbox Code Playgroud)
当我然后把
cpdef np.ndarray[np.int_t, ndim=2] naive_convolve(np.ndarray[np.int_t, ndim=2] f, np.ndarray[np.int_t, ndim=2] g)
Run Code Online (Sandbox Code Playgroud)
在相应的 .pxd 文件中(它适用于上面没有类型提示的情况)我得到:
def naive_convolve(f: np.ndarray, g: np.ndarray) -> np.ndarray:
^
------------------------------------------------------------
convolve_py.py:4:19: Compiler crash in AnalyseDeclarationsTransform
Run Code Online (Sandbox Code Playgroud)
我在自己的代码中使用更简单的类型得到了相同的结果。我的理解是 cython 应该处理 3.x 功能,并且文档引用了类型提示,我是否缺少其他方法或选项?我的编译行是:
cythonize -3 -i convolve_py.py convolve_py.pxd
Run Code Online (Sandbox Code Playgroud)