Python 带有lcms2 ctypes绑定和线程的Segfault
首先,请原谅,如果之前有人问过。。。我很擅长寻找信息,但由于我的编程技能相当基础,我可能不明白那里有什么 我正在尝试用Python进行颜色转换。我曾经使用lcms1的Python绑定,但是由于lcms2没有正式的绑定,所以我尝试使用ctypes和ctypesgen。 我使用了Python 带有lcms2 ctypes绑定和线程的Segfault,python,multithreading,ctypes,Python,Multithreading,Ctypes,首先,请原谅,如果之前有人问过。。。我很擅长寻找信息,但由于我的编程技能相当基础,我可能不明白那里有什么 我正在尝试用Python进行颜色转换。我曾经使用lcms1的Python绑定,但是由于lcms2没有正式的绑定,所以我尝试使用ctypes和ctypesgen。 我使用了ctypesgen.py-llcms2/usr/include/lcms2.h/usr/include/lcms2\u plugin.h-o lcms2.py并删除了所有.value(),因为否则它就无法工作 除了涉及线程之
ctypesgen.py-llcms2/usr/include/lcms2.h/usr/include/lcms2\u plugin.h-o lcms2.py
并删除了所有.value()
,因为否则它就无法工作
除了涉及线程之外,所有这些都可以很好地工作(对于我相当简单的需求而言)。。。
下面是一个示例代码:
from multiprocessing.dummy import Pool
from lcms2 import *
DblTriplet = c_double * 3
def Lab2RGB(values):
context = cmsCreateContext(None, None)
inprof = cmsCreateLab4ProfileTHR(context, None)
outprof = cmsCreate_sRGBProfileTHR(context)
inbuf = DblTriplet(*values)
outbuf = DblTriplet()
xform = cmsCreateTransformTHR(context, inprof, TYPE_Lab_DBL,
outprof, TYPE_RGB_DBL,
INTENT_PERCEPTUAL, 0)
cmsCloseProfile(inprof)
cmsCloseProfile(outprof)
cmsDoTransform(xform, byref(inbuf), byref(outbuf), 1)
cmsDeleteTransform(xform)
cmsDeleteContext(context)
return tuple(outbuf)
Lab = ((88.98,-1.31,110.87),
(87.55,2.18,109.06),
(60.81,65.68,85.06),
(58.66,70.05,51.19),
(55.26,72.14,43.46),
(43.8,79.35,12.7),
(51.55,78.77,-13.89),
(47.52,68.9,-42.48),
(18.74,54.58,-69.51),
(17.5,42.9,-76.01),
(14.92,31.84,-67.1),
(47.57,-33.39,-53.38),
(57.74,-77.16,0.18),
(17.06,1.29,2.54),
)
pool = Pool()
pool.map(Lab2RGB, Lab)
pool.close()
pool.join()
实际上,我在PyQt应用程序中使用了它,所以我使用了QThread,但它也会在Python线程中崩溃。我还使用了线程
,但最后使用了多处理.dummy
,以便与多处理
进行比较。我还尝试了“非THR”lcms2函数,同样的问题。我尝试了ctypesgen
以及h2py
所以我的问题是:我的线程实现中有什么错误吗?我读到你必须注意ctypes和线程,但没有设法理解我能做什么
我试过valgrind python thatscript.py
,但那个家伙的话我听不懂,但奇怪的是,它没有错…也许对你来说更容易些。它是积极维护的,这对于ctypesgen来说是不可能的。对你来说可能更容易。它是积极维护的,这对于ctypesgen来说是不可能的。