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