我在我想处理的数据库中有许多记录。基本上,我想运行几个正则表达式替换文本字符串行的标记,并在最后,并将它们写回数据库。关于python multiprocessing的初学者问题?
我想知道多处理是否会加快完成这些任务所需的时间。 我做了
multiprocessing.cpu_count
,并返回8.我已经试过类似
process = []
for i in range(4):
if i == 3:
limit = resultsSize - (3 * division)
else:
limit = division
#limit and offset indicates the subset of records the function would fetch in the db
p = Process(target=sub_table.processR,args=(limit,offset,i,))
p.start()
process.append(p)
offset += division + 1
for po in process:
po.join()
但显然,所花费的时间比运行所需的时间更高一个单一的线程。这是为什么?有人可以请指教这是一个合适的情况下,或者我在这里做错了什么?
你真的用4次迭代来测试它吗?产生每个过程需要时间。另外,postgresql每个连接只使用一个cpu。所以它可能只是排队4个查询并按顺序运行它们。另外,根据启动每个查询的开销,拆分工作可能无益。另外,还有一些东西只依赖于你的系统,比如后台进程和你正在运行的硬件。 – 2010-11-23 02:33:09
@nate,我用4测试它。我认为我每个进程使用1个连接,但.. – goh 2010-11-23 04:38:37