Python 带有lcms2 ctypes绑定和线程的Segfault

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(),因为否则它就无法工作 除了涉及线程之

首先,请原谅,如果之前有人问过。。。我很擅长寻找信息,但由于我的编程技能相当基础,我可能不明白那里有什么

我正在尝试用Python进行颜色转换。我曾经使用lcms1的Python绑定,但是由于lcms2没有正式的绑定,所以我尝试使用ctypes和ctypesgen。 我使用了
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来说是不可能的。