首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将multiprocessor.manager.list转换为纯python列表

如何将multiprocessor.manager.list转换为纯python列表
EN

Stack Overflow用户
提问于 2013-12-19 01:33:06
回答 3查看 6.1K关注 0票数 6

我的正常脚本在20秒内处理了大约30,000条记录。考虑到我必须处理的数据量(超过5000万条记录),我认为使用python的多处理是明智的。

在我的过程结束时,我使用sqlalchemy core更新数据库,其中我以50,000条为一批来更新处理过的记录。SQLAlchemy Core requires that you pass it a list for it to do a bulk update or even insert。我将这个列表命名为py_list

对于Python的多进程,我将通过一个我称之为mp_listmultiprocessing.manager.list()来捕获进程的结果。

在我将mp_list传递给SQLAlchemy bulk update语句之前,一切都很正常。此操作将失败,并显示错误AttributeError: 'list' object has no attribute 'keys'。Googling将我带到一个question on SO,它指出multiprocessing.manager.list()甚至multiprocessing.manager.dict()是/不是真正的python列表/字典。

那么问题是,如何将multiprocessing.manager.list转换为真正的python列表。

mp_list的填充方式如下:

代码语言:javascript
复制
import multiprocessing
manager = multiprocessing.Manager()
mp_list = manager.list()

def populate_mp_list(pid, is_processed):
    '''Mark the record as having been processed'''
    dict = {}
    dict['b_id'] = pid
    dict['is_processed'] = is_processed
    mp_list.append(dict)

抛出错误的SQLALchemy代码如下:

代码语言:javascript
复制
CONN = Engine.connect()
trans = CONN.begin()
stmt = mytable.update().where(mytable.c.id == bindparam('b_id')).\
values(is_processed=bindparam('is_processed'))
CONN.execute(stmt, mp_list)
trans.commit(

我尝试过将mp_list转换为真正的python列表。创建的新列表可以工作,但其创建的时间损失会抵消多处理中节省的所有时间。

如果我对返回的mp_list进行循环并创建一个新列表。

代码语言:javascript
复制
y = []
for x in mp_list:
    y.append(x)

另外,如果我对mp_list进行“复制”,每次复制都会增加3秒!平均罚点球,这并不酷。

代码语言:javascript
复制
y = mp_list[0:len(mp_list)]

那么,将multiprocessing.manager.list转换为SQLAlchemy核心可用的列表的最快方法是什么?

EN

回答 3

Stack Overflow用户

发布于 2019-05-14 11:57:30

希望我没迟到。

这不管用吗?

代码语言:javascript
复制
pythonlist = list(mp_list)

同样的事情也适用于dict:-

代码语言:javascript
复制
pythondict = dict(mp_dict)
票数 4
EN

Stack Overflow用户

发布于 2013-12-19 05:53:00

以下各项的性能如何:

Y=x,表示mp_list中的x

票数 2
EN

Stack Overflow用户

发布于 2019-07-04 18:34:04

使用list可以获得简单的解决方案。

代码语言:javascript
复制
result_list = list(proxy_list)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20664695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档