У меня есть оболочка ctypes для библиотеки. К сожалению, эта библиотека не на 100% надежна (случайные ошибки и т. Д.). Из-за того, как он используется, я хочу, чтобы оболочка была достаточно устойчивой к сбоям библиотеки.
Лучшим способом сделать это, кажется, является разветвление процесса и отправка результатов от ребенка. Я хотел бы сделать что-то вроде этого:
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)
Это не совсем работает, хотя. Разветвленный процесс зависает при записи. Я пытаюсь отправить слишком много сразу? Есть ли более простое решение этой проблемы?