python多进程+多线程实例

python多进程+多线程实例

import multiprocessing
import concurrent.futures
import time


class MultiProcessAndThread:
    def __init__(self, data):
        self.data = data

    def task(self, index):
        # 模拟处理时间
        time.sleep(1)
        # 返回处理结果
        return self.data[index] * 2, index

    def multi_thread(self, start, end, result_dict):
        # 使用线程池处理数据
        with concurrent.futures.ThreadPoolExecutor() as executor:
            # 提交任务到线程池
            futures = [executor.submit(self.task, i) for i in range(start, end)]

            # 获取结果并存储到共享字典中
            for future in concurrent.futures.as_completed(futures):
                result, index = future.result()
                result_dict[index] = result

    def multi_process(self):
        # 在Windows系统上,调用freeze_support()确保子进程能够正确启动
        multiprocessing.freeze_support()
        # 创建一个共享字典
        with multiprocessing.Manager() as manager:
            result_dict = manager.dict()

            # 划分数据到多个进程
            num_processes = 4
            chunk_size = len(self.data) // num_processes
            processes = []

            for i in range(num_processes):
                # 获取当前进程的数据块
                start = i * chunk_size
                end = start + chunk_size if i < num_processes - 1 else len(self.data)

                # 创建进程
                process = multiprocessing.Process(target=self.multi_thread, args=(start, end, result_dict))
                process.start()
                processes.append(process)

            # 等待所有进程完成
            for process in processes:
                process.join()

            print(f"Result dictionary: {str(dict(result_dict))}")

            # 注意:不要直接返回result_dict
            return [result_dict[i] for i in range(len(result_dict))]


if __name__ == '__main__':
    my_list = range(10)
    obj = MultiProcessAndThread(my_list)
    result_list = obj.multi_process()
    # 输出结果
    print(f"Result: {str(result_list)}")


posted @ 2025-06-10 17:19  Steven0325  阅读(23)  评论(0)    收藏  举报