python-无需物理移动即可在进程之间共享数据
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-无需物理移动即可在进程之间共享数据,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1507字,纯文字阅读大概需要3分钟。
内容图文
我有一份工作,可以完成很多单独的任务.对于每个任务,我需要下载一些数据,对其进行处理,然后再次上传.
我正在使用多处理池进行处理.
我有几个我不确定的问题.
首先,数据大约可以达到20MB,理想情况下,我希望将其移至子工作进程,而无需将其物理移动到内存中,也可以将结果数据也移回父进程,而无需移动.由于我不确定某些工具如何在后台运行,我不知道是否可以将数据作为参数传递给池的apply_async(据我了解,它会序列化对象,然后在到达子流程?),或者是否应该使用多处理队列或mmap?或者是其他东西?
我看了ctypes objects,但据我了解,只有可以共享流程派生时创建池时定义的对象?这对我没有好处,因为我将不断需要共享新数据.
我不需要担心的一件事是对数据的任何并发访问,因此我不需要任何类型的锁定.这是因为仅在下载数据后才开始处理,并且也仅在生成输出数据后才开始上传.
我遇到的另一个问题是,有时进来的任务可能会激增,结果,我下载任务数据的速度比子进程可以处理的速度更快.因此,我下载数据的速度快于完成任务和处理数据的速度,而python快要死于内存不足.当内存快满了/作业管道中有太多数据时,在下载阶段暂缓任务的一个好方法是什么?
我在考虑通过使用数据字节数来进行某种类型的“引用”计数,因此我可以限制下载和上传之间的数据量,并且仅在数量低于某个阈值时才下载.尽管我担心一个孩子有时可能会失败,而且我永远也不会拿走它所拥有的数据.是否有实现这种事情的好方法?
解决方法:
(这是我先前回答的讨论结果)
您是否尝试过POSH
此示例说明可以将元素追加到可变列表中,这可能是您想要的(从documentation复制):
import posh
l = posh.share(range(3))
if posh.fork():
#parent process
l.append(3)
posh.waitall()
else:
# child process
l.append(4)
posh.exit(0)
print l
-- Output --
[0, 1, 2, 3, 4]
-- OR --
[0, 1, 2, 4, 3]
内容总结
以上是互联网集市为您收集整理的python-无需物理移动即可在进程之间共享数据全部内容,希望文章能够帮你解决python-无需物理移动即可在进程之间共享数据所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。