我正在尝试读取csv文件并计算线性处理所需的时间,使用线程和多处理,但我的代码似乎没有得到正确的输出。如果有人可以帮我处理这些代码,那就太好了。
多处理和线性处理:
$newSelection = $affectedTR.add($('#location-usergroup-table tr[data-domain-id="' + domainID + '"'));
线程:
import csv
import time
import multiprocessing
from multiprocessing import Process
proces=[]
number_of_processes=2
class mulprocess():
def data(self):
with open('test.csv','r+') as f:
reader=csv.reader(f)
for row in reader:
print row
def processdata(self):
for i in range(2):
start_time=time.time()
proces.append(multiprocessing.Process(target=self.data(),args=()))
for p in proces:
p.start()
for p in proces:
p.join()
end_time=time.time()
print end_time-start_time
a=mulprocess()
a.data()
a.processdata()
答案 0 :(得分:0)
忽略在不同进程中反复加载同一文件的无意义(顺便说一句,这可能会导致并发错误,因为您正在以r+
模式加载文件,有效地锁定它)和将实例方法作为单独的进程调用的一般不明智的方法,问题的关键在于:
proces.append(multiprocessing.Process(target=self.data(), args=()))
您告诉multiprocessing.Process
实例,您需要将target
设置为self.data()
方法返回的任何内容,即None
,因此您的流程不会#39;得到任何可以使用或调用的东西,所以一切都在主进程中执行,当然,它需要花费两倍的时间。检查this answer以了解如何正确设置多处理基准。
对于threading
- 没有理由尝试它,处理速度比单线程方法慢。使用线程的唯一优势是半并行化I / O操作。