陆游与代代 2022-03-10 16:22 采纳率: 50%
浏览 81
已结题

如何多线程(多进程)加速while循环(语言-python)

问题是利用如下代码并没有起到加速循环,提高效率的目的。

import numpy as np
import os
import sys
import multiprocess as mp
import time

def MCS(input_data, med):
t1 = time.perf_counter()
left = 0
lp = 0
while True:
lp = lp + 1
data_pool = input_data + left
output_data = med * 0.05 * data_pool / (10000 + med)
output_data = np.where(output_data > data_pool, data_pool, output_data)
left = data_pool - output_data
cri = (input_data - output_data) / input_data * 100
print(lp, data_pool, output_data, cri)
if cri <= 1:
break
t2 = time.perf_counter()
print(f'Finished in {t2 - t1} seconds')

if name == 'main':
pool = mp.Pool(processes=10)
pool.apply_async(MCS, args=(100, 0.4))
pool.close()
pool.join()

运行结果和没有使用多线程的结果相差不大。希望可以利用多线程显著提高while循环的速度,节省时间。
  • 写回答

3条回答 默认 最新

  • DeadPool loves Star 2022-03-11 10:05
    关注

    题主你这个好像还是单线程,你只加入了一个MCS线程到线程池里https://www.cnblogs.com/CircleWang/p/15705467.html

    正确的做法应该是将while循环拆成很多个小份,每个线程执行一部分,最后将结果汇总

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月26日
  • 已采纳回答 3月18日
  • 创建了问题 3月10日

悬赏问题

  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多