在python中使用多线程保存文件

时间:2019-04-12 17:37:53

标签: python hash python-multithreading

我有一堆文件要加载,处理并保存到另一个文件,并且由于大小很大,所以我使用了多线程(在for循环中)。但是,处理后仅保存了少数文件。如何确保所有文件都已保存?

代码段- 1.主要

for b in range(40):
    with open("/data/b{0}.pickle".format(str(b)), "rb") as f:
        data = pickle.load(f)
    name="hash_table_"+str(b)
    p = multiprocessing.Process(target=generate_hash, args=(data,name))
    processes.append(p)
    p.start()

for process in processes:
    process.join()
  1. 正在处理文件:
def generate_hash(m, name):
    hash_table = {}

    for index, elem in enumerate(m):

       ...
       # some code that updates hash_table
    save_hash_table(hash_table, name)

    return hash_table
  1. 保存文件的功能:
def save_hash_table(hash_table, name):
    with open(os.path.join("/data/hashes", name+".pickle"), "wb") as f:
        pickle.dump(hash_table, f)

预期的文件-hash_table_0到hash_table_39个pickle文件,总共40个文件

实际文件-在hash_table_0和hash_table_39之间大约20个文件

0 个答案:

没有答案