0

私の質問は以前はあまり明確ではなかったと思います.ctpyes関数のマルチプロセッシングを行う関数を含むクラスモジュールを作成しようとしています。

動作する小さなコードを再投稿しています。私がしたいのは、以下のコードを削除して、クラスから直接関数を呼び出すことだけです。しかし、ctypes オブジェクトは picklable ではないため、非常に難しいようです..この問題を解決する方法はありますか? ちょっとしたヒントでも大歓迎です!! ctypes の代わりに cython を使用するように切り替える必要がありますか? それも役立ちますか?

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