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 操作。