Python 中的多线程和多处理
Muti threading and multiprocessing in Python
我正在尝试读取一个 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()
忽略在不同进程中反复加载相同文件的无意义(顺便说一句,这可能会导致并发错误,因为您正在以 r+
模式加载文件,有效地锁定它)和将实例方法作为单独的进程调用的一般不明智的方法,问题的症结在于:
proces.append(multiprocessing.Process(target=self.data(), args=()))
你告诉 multiprocessing.Process
实例的是将 target
设置为任何你的 self.data()
方法 returns,即 None
,因此您的流程无法使用或调用任何东西,因此所有内容都在您的主流程中执行,当然,这需要双倍的时间。检查 以了解如何正确设置多处理基准。
至于threading
- 没有理由尝试,它的处理速度会比单线程方法慢。使用线程的唯一优势是半并行化 I/O 操作。
我正在尝试读取一个 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()
忽略在不同进程中反复加载相同文件的无意义(顺便说一句,这可能会导致并发错误,因为您正在以 r+
模式加载文件,有效地锁定它)和将实例方法作为单独的进程调用的一般不明智的方法,问题的症结在于:
proces.append(multiprocessing.Process(target=self.data(), args=()))
你告诉 multiprocessing.Process
实例的是将 target
设置为任何你的 self.data()
方法 returns,即 None
,因此您的流程无法使用或调用任何东西,因此所有内容都在您的主流程中执行,当然,这需要双倍的时间。检查
至于threading
- 没有理由尝试,它的处理速度会比单线程方法慢。使用线程的唯一优势是半并行化 I/O 操作。