我需要对Python作业实现多线程。你知道吗
我有一个字典,字典中的每个键(大约40个)都是一个带时间戳的数据帧。大多数数据帧都有100000+行。它们的时间戳是"%Y-%m-%d %H:%M:%S"
格式的字符串。你知道吗
要转换带时间戳的字符串,我使用以下函数:
def to_dt(df):
df['timestamp'] = df['timestamp'].map(lambda n: pd.to_datetime(n, format='%Y-%m-%d %H:%M:%S'))
return df
所以我想把每个进程to_dt(df)
放在一个单独的线程中。我该怎么做?你知道吗
为了简化,我们考虑以下设置:
def to_dt(df):
df['timestamp'] = df['timestamp'].map(lambda n: pd.to_datetime(n, format='%Y-%m-%d %H:%M:%S'))
return df
# empty dictionary
d_test = {}
# dataframe with single string timestamp column
df = pd.DataFrame(columns=['st_dt'])
# populate dataframe with 1000 timestamp rows
for i in range(1000):
df.loc[len(df)] = ['2018-10-02 10:00:00']
# add 20 instances of the dataframe to the dictionary with keys in format "a0" to 'a19'
for i in range(20):
d_test['a'+str(i)] = df
现在我们如何使每个迭代
for i in range(20):
to_dt(d_test['a'+str(i)])
在单独的线程中运行?你知道吗
只需阅读Python中的线程应该只在进程执行过程中有某种等待时使用,例如连接到远程服务器或端口扫描时,等等
在上述情况下,没有任何等待,因此不需要线程。你知道吗
由于GIL的存在,Python中任何时候都只有一个线程在运行,因此在这种情况下多线程只会使性能更差。你知道吗
为了使用多核,您需要多处理而不是多线程,但是生成新进程的沉重开销肯定会超过其好处,因此在您的情况下最好使用单个
pd.to_datetime
。你知道吗而且this post很好地解释了GIL。你知道吗
相关问题 更多 >
编程相关推荐