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)}")
God will send the rain when you are ready.You need to prepare your field to receive it.

浙公网安备 33010602011771号