【发布时间】:2009-04-16 16:47:21
【问题描述】:
我有一个库的 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)
不过,这并不完全奏效。分叉的进程在写入时挂起。我想一次发送太多吗?这个问题有更简单的解决方案吗?
【问题讨论】: