【问题标题】:multi thread memory error issue with infinite while loop无限循环的多线程内存错误问题
【发布时间】:2023-01-24 19:39:53
【问题描述】:

我有无限循环等待消息,一旦我收到消息,例如 30 秒的消息累积并分成块并并行处理。

def process_data(data, i):
    #process data for chunks
   
    return True

while true:
    for n in range(len(num_of_chunks)):
        t = threading.Thread(target=process_data, args=(num_of_chunks[n], n))
        threads.append(t)
        t.start()

    # Stop the threads
    for x in threads:
        t.join()

但是,导致 MemoryError。

任何需要更新的东西以避免内存问题并顺利工作

【问题讨论】:

    标签: python python-3.x multithreading multiprocessing


    【解决方案1】:

    当程序使用多个线程并且其中一个或多个线程陷入无限循环时,可能会发生无限 while 循环的多线程内存错误问题。这会导致程序消耗大量内存,导致内存错误。

    以下是解决此问题的一些方法:

    打破无限循环:解决此问题的一种方法是通过添加允许循环在满足特定条件时退出的条件来打破无限循环。

    限制迭代次数:解决此问题的另一种方法是限制循环在退出之前可以执行的迭代次数。这可以通过添加一个计数器变量来完成,该变量随着每次迭代而递增,并在计数器达到特定值时退出循环。

    使用超时:可以在循环中添加超时,使其在一定时间后退出。这可以通过使用 Python 中的 sleep() 函数或 Java 中的 Thread.sleep() 方法来完成。

    实施线程池:线程池可用于限制在任何给定时间处于活动状态的线程数。这可以通过使用 Java 中的 Executor 框架或 Python 中的 concurrent.futures 库来完成。

    使用标志或原子变量来控制循环:无限 while 循环可以由标志或原子变量控制,可以将其设置为 false 以退出循环。

    监控内存使用情况:监控程序的内存使用情况,以确定哪个线程消耗的内存最多,并采取适当的措施。

    重要的是要记住无限循环通常被认为是不好的做法,最好尽可能避免它们。

    同样重要的是要注意,解决方案将取决于程序的具体实现和所使用的语言,如果问题仍然存在,最好查阅文档并寻求专家的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 2011-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多