私はPythonのマルチプロセッシングモジュールと一緒に使用しようとしているc-pointerを含むcythonで実装されたクラスを持っています。クラスはクラスのインスタンスを返すためにDLLファイルを受け取ります。Pickle Pythonマルチプロセッシングでのcythonクラス
インスタンスのデータ型は保持されていますが、空である、つまりすべてのクラス関数にアクセスできますが、入力前に設定したインスタンス値がすべて失われているという問題があります。 special_classを含むコードは非常に大きいので、私はそれを含めることができません。
import time
import multiprocessing as mp
from special_module import special_class
def run_task(tasks,nr):
obj = tasks[nr]['data']
print obj.get_name()
if __name__ == "__main__":
m1 = special_class("a.dll")
m2 = special_class("b.dll")
tasks = dict()
tasks[1] = {'data': m1}
tasks[2] = {'data': m2}
process1 = mp.Process(target = run_task, name = 'process1', args = (tasks, 1))
process2 = mp.Process(target = run_task, name = 'process2', args = (tasks, 2))
process1.start()
time.sleep(0.2)
process2.start()
process1.join()
process2.join()
上記のスクリプトは、私に出力
None
None
機能は、それが正常に動作しますrun_taskの内側に、私はインスタンスを作成する場合は、正しい出力が
name.a
name.b
のスタイルにする必要がありますを提供します私は、メインプロセスでインスタンスを作成して動作させる方法を探しています。これは可能ですか?
[カスタムピックラーを使用してください](https://docs.python.org/3/library/copyreg.html)を参照してください。 – Phillip
すべてのウィンドウ(OS) 'class access'はPython上の登録されたポイントを必要としました。あなたはDLLにアクセスするが、すべての 'データアクセス'プロシージャを設定する方法。 'pythoncom.CoInitialize()'を使う必要があります。 [これをチェック](http://stackoverflow.com/questions/26764978/using-win32com-with-multithreading) – dsgdfg
Umm ... 'import special_class'の後に' m1 = special_class( "a.dll") 'isn ' t法律;モジュールを呼び出すことはできません。実際のコードでは少し違うと思いますが、いずれにせよ、ここではCythonクラスの定義が重要です。あなたはそれを省略できません。 – ShadowRanger