私の質問は以前はあまり明確ではなかったと思います.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'])