tou datetime函数的Python多线程实现

2024-04-23 05:30:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要对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)])

在单独的线程中运行?你知道吗


Tags: to数据intestformatdataframedffor
2条回答

只需阅读Python中的线程应该只在进程执行过程中有某种等待时使用,例如连接到远程服务器或端口扫描时,等等

在上述情况下,没有任何等待,因此不需要线程。你知道吗

由于GIL的存在,Python中任何时候都只有一个线程在运行,因此在这种情况下多线程只会使性能更差。你知道吗

为了使用多核,您需要多处理而不是多线程,但是生成新进程的沉重开销肯定会超过其好处,因此在您的情况下最好使用单个pd.to_datetime。你知道吗

而且this post很好地解释了GIL。你知道吗

相关问题 更多 >