【发布时间】:2015-07-23 07:27:12
【问题描述】:
我想使用 multiprocessing.Manager() 对象,这样我就可以将信息从工作人员异步发送到管理器以将信息发送到服务器。我拥有大约 10 个将 PDF 写入磁盘的实例。然后我想使用多处理包中的管理器对象将该数据发送到我的 S3 存储桶,因为我不想阻止本地内容生成。
所以我想知道如果我创建一个自定义管理器对象,这是正确的方法吗?提交给管理器对象的每个进程都会排队吗?或者如果我调用多个上传,经理会放弃一些调用吗?
下面是我想做的示例代码:
from multiprocessing.managers import BaseManager
class UploadClass(object):
def upload(self, filePath, params, destUrl):
# do stuff
return results
class MyManager(BaseManager):
pass
MyManager.register('uploads', UploadClass)
if __name__ == '__main__':
manager = MyManager()
manager.start()
upload = manager.uploads()
# do this wait for completion or do they perform this async
print upload.upload(r"< path >", {...}, "some url")
print upload.upload(r"< path >", {...}, "some url")
【问题讨论】:
-
澄清一下:您想要有十个不同的进程(这些是同一个 python 脚本的唯一实例,还是只是在一个脚本中产生的 multiprocessing.Process 实例?),它们都将 PDF 写入磁盘。一旦完成写入,每个实例都会将文件的路径发送到单个
multiprocessing.Manager,它应该一次上传一个文件(意味着没有并行上传)。对吗? -
另外,您是否关心从上传过程中获取结果?还是您只是想在后台启动上传并忘记它?
-
@dano - 从进程中取回某种消息以确保进程正常运行会很有帮助。
标签: python python-2.7 amazon-s3 multiprocessing