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

如何多线程(多进程)加速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循环拆成很多个小份,每个线程执行一部分,最后将结果汇总

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
  • Admini$trat0r .net领域新星创作者 2022-03-10 16:41
    关注

    线程并不是开的越多越好,比如你的cpu是16个线程,他需要频繁切换线程,你的线程池只负责调度,这样频繁切换反而会变慢,听懂掌声。

    评论
  • 有问必答小助手 2022-03-18 18:55
    关注
    您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
    PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632
    评论
查看更多回答(2条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥50 burgers方程求逆
  • ¥15 matlab最小二乘法拟合非线性曲线提问
  • ¥15 电脑锁屏时vba运行SAP,excel数据不能复制到SAP
  • ¥50 74LS系列 74LS00 74LS04设计一个RS485电路(关键词-差分)
  • ¥30 各位help写一下代码
  • ¥15 在运行SDEdit模型下载不了
  • ¥15 求51控制l298n驱动的小车中超声波避障怎么写
  • ¥15 电脑连上WIFI却用不了
  • ¥30 MATLAB在RLC电路的固有响应和阶跃响应GUI仿真报告
  • ¥15 hyper-v出现的问题