Python中的多线程和多处理

时间:2017-06-23 09:52:06

标签: python multithreading python-multiprocessing

我正在尝试读取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()

1 个答案:

答案 0 :(得分:0)

忽略在不同进程中反复加载同一文件的无意义(顺便说一句,这可能会导致并发错误,因为您正在以r+模式加载文件,有效地锁定它)和将实例方法作为单独的进程调用的一般不明智的方法,问题的关键在于:

proces.append(multiprocessing.Process(target=self.data(), args=()))

您告诉multiprocessing.Process实例,您需要将target设置为self.data()方法返回的任何内容,即None,因此您的流程不会#39;得到任何可以使用或调用的东西,所以一切都在主进程中执行,当然,它需要花费两倍的时间。检查this answer以了解如何正确设置多处理基准。

对于threading - 没有理由尝试它,处理速度比单线程方法慢。使用线程的唯一优势是半并行化I / O操作。