0

我认为我的问题以前不是很清楚。我正在尝试创建一个包含函数的类模块,该函数对 ctpyes 函数进行多处理。

我正在重新发布一个有效的小代码。我要做的就是删除下面的代码并直接从我的类中调用该函数。但这似乎很难,因为 ctypes 对象不可腌制。有没有办法解决这个问题?即使是一个小提示也将不胜感激!我是否必须改用 cython 而不是 ctypes?那会有帮助吗?

def myc(x):
    return a.funct(x)

下面是工作代码。

from ctypes import *
from ctypes.util import find_library
import multiprocess as mp
class ctest():
    def __init__(self):
        self.libapr = cdll.LoadLibrary(find_library('apr-1'))
        self.libapr.apr_fnmatch.argtypes = [c_char_p, c_char_p, c_int]
        self.libapr.apr_fnmatch.restype = c_int
    def funct(self,x):
        y=self.libapr.apr_fnmatch(x, 'name.ext', 0)
        return y
    def mymult(self,func,xlist):       
        pool=mp.Pool(20)
        res=pool.map(func,xlist)
        pool.close()
        return res
if __name__ == "__main__":
    a=ctest()
    def myc(x):return a.funct(x)
    print a.mymult(myc,['*.txt','*.ext'])

下面是我想做的。

from ctypes import *
from ctypes.util import find_library
import multiprocess as mp
class ctest():
    def __init__(self):
        self.libapr = cdll.LoadLibrary(find_library('apr-1'))
        self.libapr.apr_fnmatch.argtypes = [c_char_p, c_char_p, c_int]
        self.libapr.apr_fnmatch.restype = c_int
    def funct(self,x):
        y=self.libapr.apr_fnmatch(x, 'name.ext', 0)
        return y
    def mymult(self,func,xlist):       
        pool=mp.Pool(20)
        res=pool.map(func,xlist)
        pool.close()
        return res
if __name__ == "__main__":
    a=ctest()
    a.mymult(a.funct,['*.txt','*.ext'])
4

0 回答 0