ライブラリ用のctypesラッパーがあります。残念ながら、このライブラリは100%信頼できるわけではありません(時折のsegfaultなど)。それがどのように使用されるかという理由で、私はラッパーがライブラリのクラッシュに対して適度に回復力があることを望んでいます。
これを行う最良の方法は、プロセスをフォークし、結果を子から送り返すことのようです。私はこれらの線に沿って何かをしたいです:
r, w = os.pipe()
pid = os.fork()
if pid == 0:
# child
result = ctypes_fn()
os.write(w, pickle.dumps(result))
os.close(w)
else:
# parent
os.waitpid(pid, 0)
result = os.read(r, 524288) # can be this big
os.close(r)
return pickle.loads(result)
ただし、これは完全には機能しません。フォークされたプロセスは書き込みでハングします。一度に送信しすぎていませんか?この問題に対するより簡単な解決策はありますか?