【问题标题】:Run certain number of threads/processes simultaneously同时运行一定数量的线程/进程
【发布时间】:2014-03-30 11:49:24
【问题描述】:

我需要同时运行一定数量的线程或进程,直到它们全部完成。我如何在 Python 2.6 中做到这一点。 (注意:我相信 Python 3.0 有 ThreadPoolExecutor 但这对我没有帮助,因为我们使用的是 2.6)。

我尝试了以下方法:

    pool = multiprocessing.Pool(2)

    try:
        for table_name in table_list:
            pool.apply_async(Processor(table_name, self.type, 
                self.properties).exec())
    except KeyboardInterrupt:
        pool.terminate()
    else:
        pool.close()
    pool.join()

但它按顺序处理每个表。我想要的是,如果有 10 个表并且池大小为 5,那么它应该首先启动 5 个线程。一旦其中一个完成,它应该选择下一个,然后是下一个,依此类推,直到所有这些都处理完毕。

如何在 Python 2.6 中做到这一点?

【问题讨论】:

    标签: python multithreading multiprocessing python-2.6


    【解决方案1】:
    pool.apply_async(Processor(table_name, self.type, self.properties).exec())
    

    立即调用.exec 你需要延迟所以改为传递.exec 函数:

    pool.apply_async(Processor(table_name, self.type, self.properties).exec)
    

    apply_async(func[, args[, kwds[, callback]]])

    【讨论】:

    • 谢谢,丹!那行得通。一个不同但相关的问题。现在输出都混在一起了,所以我不知道哪条线来自哪个进程。有没有简单的方法来解决这个问题?我必须使用日志框架或类似的东西吗?
    • 要么让他们在输出行前加上前缀,要么让他们写入不同的输出。
    猜你喜欢
    • 2021-04-28
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 2022-06-24
    相关资源
    最近更新 更多