Python 使用线程的不希望的结果

Python 使用线程的不希望的结果,python,multithreading,python-2.7,pandas,Python,Multithreading,Python 2.7,Pandas,我试图理解线程,但我想我只是把自己弄糊涂了。 我有一个使用第三方API的Emmys类。在这个类中,我有一个create\u data方法,该方法查询数据库并创建一个Pandas DataFrame,稍后我将其加入另一个DataFrame 该类如下所示: import inro.emme.database.emmebank as _bank from pandas import DataFrame import numpy as np class Emmys(object): def _

我试图理解
线程
,但我想我只是把自己弄糊涂了。 我有一个使用第三方API的
Emmys
类。在这个类中,我有一个
create\u data
方法,该方法查询数据库并创建一个
Pandas DataFrame
,稍后我将其加入另一个
DataFrame

该类如下所示:

import inro.emme.database.emmebank as _bank
from pandas import DataFrame
import numpy as np

class Emmys(object):
    def __init__(self):
        self.df = DataFrame(data=np.arange(24), columns=["Hour"])

    def create_data(self,path,names):
        d = []
        columns = ["Hour"]
        columns.extend(names)
        with _bank.Emmebank(path) as bank:
            for scenario in bank.scenarios():
                if 2000 <= scenario.number < 3000:
                    vmt = []
                    vht = []
                    hour =  int(bank.scenario(scenario.number).title.split()[1].split("-")[0])    
                    network_links = bank.scenario(scenario.number).get_network().links()            
                    for link in network_links:
                        if 1 <= link.volume_delay_func <= 9: 
                            vmt.append(link.length * link.auto_volume)
                            vht.append((link.auto_time/60) * link.auto_volume)
                    d.append([hour,sum(vmt),sum(vht)])  
            temp =  DataFrame(d,columns=columns)
            self.df = DataFrame.merge(self.df, temp, how="left", on="Hour")
常规方法

startTime = datetime.now()
e = Emmys()
path = "I:/ModServStaff/1/emmebank"
e.create_data(path,["VMT_PS","VHT_PS"])
path = "I:/ModServStaff/2/emmebank"
e.create_data(path,["VMT_NPS","VHT_NPS"])
print datetime.now() - startTime 
#0:01:51.793000 minutes to run
我得到两个不同的结果

通过我的
e1
(线程化),我得到了以下
DataFrame

e1.df.head()
    Hour    VMT_NPS         VHT_NPS
0   0       372340.128855   8427.114585
1   1       253214.489522   5640.123767
2   2       227031.655104   5062.068237
3   3       245598.203502   5473.983267
4   4       348784.430498   7787.368914
使用
e
对象(使用常规方法),我得到:


使用常规方法,我得到了我想要的
数据帧。我的
线程化
方法只返回
\u NPS
列,有什么问题?还有为什么
线程化方法运行时间更长?我认为常规方法会更快。

我看不出任何区别,只是你似乎复制了两次结果列。在8到5小时内。我只是贴了个头像,让它短一点。但我不知道其他两个专栏发生了什么。
e1.df.head()
    Hour    VMT_NPS         VHT_NPS
0   0       372340.128855   8427.114585
1   1       253214.489522   5640.123767
2   2       227031.655104   5062.068237
3   3       245598.203502   5473.983267
4   4       348784.430498   7787.368914
e.df.head()
    Hour    VMT_PS          VHT_PS          VMT_NPS         VHT_NPS
0   0       372340.128855   8427.114585     372340.128855   8427.114585
1   1       253214.489522   5640.123767     253214.489522   5640.123767
2   2       227031.655104   5062.068237     227031.655104   5062.068237
3   3       245598.203502   5473.983267     245598.203502   5473.983267
4   4       348784.430498   7787.368914     348784.430498   7787.368914