python使用Pool创建多个进程但不执行结果

时间:2017-04-18 03:00:05

标签: multiprocessing python-multiprocessing

我把所有的函数放在一个类中,包括创建函数的过程和执行函数,在另一个文件中调用这个类的函数

from multiprocessing import Pool
def initData(self, type):
# create six process to deal with the data
    if type == 'train':
        data = pd.read_csv('./data/train_merged_8.csv')
    elif type == 'test':
        data = pd.read_csv('./data/test_merged_2.csv')
    modelvec = allWord2Vec('no').getModel()
    modelvec_all = allWord2Vec('all').getModel()
    modelvec_stop = allWord2Vec('stop').getModel()
    p = Pool(6)
    count = 0
    for i in data.index:
        count += 1
        p.apply_async(self.valueCal, args=(i, data, modelvec, modelvec_all, modelvec_stop))
        if count % 1000 == 0:
            print(str(count // 100) + 'h rows of data has been dealed')
    p.close()
    p.join


def valueCal(self, i, data, modelvec, modelvec_all, modelvec_stop):
# the function run in process
    list_con = []
    q1 = str(data.get_value(i, 'question1')).split()
    q2 = str(data.get_value(i, 'question2')).split()
    f1 = self.getF1_union(q1, q2)
    f2 = self.getF2_inter(q1, q2)
    f3 = self.getF3_sum(q1, q2)
    f4_q1 = len(q1)
    f4_q2 = len(q2)
    f4_rate = f4_q1/f4_q2            

    q1 = [','.join(str(ve)) for ve in q1]
    q2 = [','.join(str(ve)) for ve in q2]
    list_con.append('|'.join(q1))
    list_con.append('|'.join(q2))

    list_con.append(f1)
    list_con.append(f2)
    list_con.append(f3)
    list_con.append(f4_q1)
    list_con.append(f4_q2)
    list_con.append(f4_rate)

    f = open('./data/test.txt', 'a')
    f.write('\t'.join(list_con) + '\n')
    f.close()

结果很快就会出现,但是我甚至没有看到正在创建的文件。但是当我检查任务管理器时,确实有六个进程被创建并消耗了大量资源。程序完成后,仍然不会创建该文件。 我该如何解决这个问题?

10h rows of data have been dealed
20h rows of data have been dealed
30h rows of data have been dealed
40h rows of data have been dealed

0 个答案:

没有答案