【发布时间】:2017-06-23 09:52:05
【问题描述】:
我正在尝试读取 csv 文件并使用线程和多处理来计算线性处理所需的时间,但我的代码似乎没有得到正确的输出。如果有人可以帮助我编写代码,那就太好了。
多处理和线性处理:
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()
线程:
import csv
import time
import threading
thread_count=2
threads=[]
class Operation():
def data(self):
with open('test.csv','r+') as f:
reader=csv.reader(f)
for row in reader:
print row
def filedata(self):
for i in range(thread_count):
threads.append(threading.Thread(target=self.data,args=()))
start_time=time.time()
for t in threads:
t.start()
t.join()
end_time=time.time()
print end_time-start_time
a=Operation()
a.filedata()
【问题讨论】:
-
为什么要多个进程从磁盘读取数据?
-
如果他有2个磁盘怎么办? :) 如果涉及处理数据一点或更多怎么办?
-
无论如何,不要为线程而烦恼,因为 GIL 的存在,它们无法实现良好的并行计算。仅当您希望另一个线程在第一个线程等待内容(例如输入或 HTTP 响应)时执行某些操作时才使用线程
-
@AlexanderMP 如果文件没有在要多处理的函数中硬编码,这可能是合理的。我认为多重访问比它的价值更麻烦,而且可能不会更快
-
我想计算线程/进程数不同的 3 个进程的处理时间差异。我的 csv 文件有 20 万行,40 列,所以我想尝试多线程和多处理
标签: python multithreading python-multiprocessing