Python使用多进程和多线程处理数据

多进程适合于计算密集型任务和需要大量计算资源的场景,而多线程适合于I/O密集型任务和需要快速上下文切换的场景。

多线程版本

import time
import concurrent.futures
from tqdm import tqdm


file_list = ['file1.txt', 'file2.txt', 'file3.txt']*10

def process_file(file, i):
    print(file, i)
    # 这里放置处理文件的代码
    time.sleep(2)
    return file

with (concurrent.futures.ThreadPoolExecutor(max_workers=10)) as executor:
    futures = [executor.submit(process_file, file, i) for i, file in enumerate(file_list)]

    for future in tqdm(concurrent.futures.as_completed(futures), total=len(futures)):
        file = future.result()

多进程版本

import time
import concurrent.futures
from tqdm import tqdm
import os

file_list = ['file1.txt', 'file2.txt', 'file3.txt']*10

def process_file(file, i):
    print(f"Processing {file} - {i}")
    # 这里放置处理文件的代码
    time.sleep(2)
    return file

# 确保进程间不会共享全局变量
file_list = file_list[:os.cpu_count()]  # 限制任务数量以防过多

with concurrent.futures.ProcessPoolExecutor(max_workers=10) as executor:
    futures = [executor.submit(process_file, file, i) for i, file in enumerate(file_list)]

    for future in tqdm(concurrent.futures.as_completed(futures), total=len(futures)):
        file = future.result()

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,我们可以同时使用多线程多进程来实现并行处理任务。 多线程多进程都是实现并行计算的方式,但它们的实现方式不同。多线程是在同一进程内创建多个线程,每个线程独立运行,但它们共享进程的资源。多进程是创建多个独立的进程,每个进程拥有自己的资源,它们之间通过进程间通信(IPC)进行数据交换。 在Python中,我们可以使用`multiprocessing`模块来创建多进程使用`threading`模块来创建多线程。同时使用多线程多进程可以充分利用CPU资源,提高程序的运行效率。 以下是一个示例代码,同时使用多线程多进程处理数据: ```python import multiprocessing import threading def process_data(data): # 进程处理数据 pass def thread_data(data): # 线程处理数据 pass if __name__ == '__main__': # 创建进程 process1 = multiprocessing.Process(target=process_data, args=(data,)) process2 = multiprocessing.Process(target=process_data, args=(data,)) # 启动进程 process1.start() process2.start() # 创建线程 thread1 = threading.Thread(target=thread_data, args=(data,)) thread2 = threading.Thread(target=thread_data, args=(data,)) # 启动线程 thread1.start() thread2.start() ``` 在上面的示例代码中,我们创建了两个进程和两个线程来处理数据。在实际应用中,我们需要根据具体情况选择使用多线程多进程或者两者结合使用,以达到最优的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值