我正在寻找margin-top
函数的$scope.max = Math.max.apply(null, Object.keys(data.lang).map(function(key) {
return data.lang[key];
}));
模拟,以便在没有C
的并行tempfile.NamedTemporaryFile()
代码中使用它。理论上Cython
函数可以解决这个问题:
GIL
但是,由于某种原因,它仍然不起作用,因为我在编译期间收到以下错误:
tmpnam
我不明白这个from cython import parallel
from libc.stdio cimport FILE, tmpnam, fopen, fclose, fwrite
from libcpp.string cimport string
cdef save_obj(string obj):
cdef char* fname
cdef FILE* cfile
with nogil, parallel.parallel():
fname = tmpnam(NULL)
cfile = fopen(fname, "wb")
fwrite(obj.data(), 1, obj.size(), cfile)
fclose(cfile)
对象的来源,因为函数来自 with nogil, parallel.parallel():
fname = tmpnam(NULL)
^
------------------------------------------------------------
testc2.pyx:9:23: Converting to Python object not allowed without gil
。
有人可以解释一下,为什么它仍然需要python
C
,我怎么能克服这个问题呢?
答案 0 :(得分:1)
用于导入C标准库中的本机函数的所有Cython信息都来自pxd
文件中的信息,类似于头文件。 Cython捆绑了C标准库头文件的几个pxd
文件,包括stdio.pxd
link。这是您从代码的第二行导入的内容。
如果您查看了该链接,您会发现tmpnam
未在捆绑的stdio.pxd
中定义,因此Cython猜测您是在该上下文中使用Python名称。您仍然可以导入该功能,但您必须提供原型:
cdef extern from "stdio.h" nogil:
char* tmpnam(char*);