python – 如何从分叉进程发送大量数据?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何从分叉进程发送大量数据?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含881字,纯文字阅读大概需要2分钟。
内容图文
![python – 如何从分叉进程发送大量数据?](/upload/InfoBanner/zyjiaocheng/955/e2d19a1eb7604f81962cbb338c5007fa.jpg)
我有一个库的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)
但这并不是很有效.分叉的进程在写入时挂起.我想一次发送太多吗?这个问题有一个更简单的解决方案吗?
解决方法:
可能你正在尝试编写的数据超出管道的数量,所以它会阻塞,直到有人出现并从中读取一些信息.这种情况永远不会发生,因为唯一的读者是父进程,您似乎已经编写该进程以等待子进程在读取任何内容之前终止.这就是我们所说的死锁.
您可以考虑取出os.waitpid调用,看看会发生什么.另一种选择是看os.pipe是否有任何方法可以给它一个更大的缓冲区(我不知道你的环境足以说明).
内容总结
以上是互联网集市为您收集整理的python – 如何从分叉进程发送大量数据?全部内容,希望文章能够帮你解决python – 如何从分叉进程发送大量数据?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。