首页 > 解决方案 > 简单的python脚本,多线程?

问题描述

我有一个简单的 python 脚本,它从两个 .txt 文件中读取并将输出保存在一个新的文本文件中。

这就是我的代码的样子:

import os

with open("users.txt", encoding="utf-8") as f:
    users = f.readlines()
users = [x.strip() for x in users] 

with open("users1.txt", encoding="utf-8") as f:
    passes = f.readlines()
passes = [x.strip() for x in passes]

results = []

for user in users:
    h = user[user.find(':') + 1:]
    for p in passes:
        if p[:p.find(':')] == h:
            results.append((user[:user.find(':')], p[p.find(':') + 1:]))
            passes.remove(p)
            break

with open('results.txt', 'w+', encoding="utf-8") as f:
    for item in results:
        f.write(f"{item[0]}:{item[1]}\n")

user.txt 有大约 3-10M 行。这当然需要很长时间来处理,我说 1-3 个小时。我认为唯一的原因是脚本在单个线程中运行。我做了一些挖掘,我没有想法。有没有办法让这个简单的脚本在超过 1 个线程上运行?它会加快这个过程吗?

谢谢!

标签: pythonpython-3.xmultithreading

解决方案


如果您首先将通行证转换为某种字典,它将为您节省大量时间。我不完全理解您的代码,但似乎每个userpass嵌入了某种 id 或密钥,并且您正在寻找匹配的 id。

将通行证转换为字典

my_dictionary = { pass[:pass.find(':')] : pass for pass in passes } 

你的外循环是:

for user in users:
    id = user[user.find(':') + 1:]
    if id in my_dictionary:
        pass = my_dictionary[id]
        .... whatever you do with user and pass ...
        del my_dictionary[id]

单个字典查找而不是嵌套循环。


推荐阅读