【问题标题】:What is the best way to execute a slow function? [closed]执行慢速功能的最佳方法是什么? [关闭]
【发布时间】:2014-11-03 21:58:23
【问题描述】:

我有一个 python 函数,执行大约需要 1 分钟。我需要为我的数据库中的每个用户运行它。在最短的时间内执行的最佳方法是什么? (假设我不能减少 fn 执行时间)。我应该为每个用户创建多个线程吗? (我无法控制用户数量)。

【问题讨论】:

    标签: python multithreading scalability


    【解决方案1】:

    假设你的慢函数很慢,因为它是 CPU 密集型的,为每个用户生成一个线程可能是一种危险,如果你有一个大数据库,你可能会有数千个线程竞争资源。您可以使用multiprocessing.Pool 来拥有一个工人池:

    from multiprocessing import Pool
    
    def f(user):
        # do something
    
    users = ['Alice', 'Bob', 'Carol', 'Dave']
    pool = Pool(processes=10)
    results = pool.map(f, users)
    

    即使users 是一千个名字的列表,你也总是最多有 10 个进程同时运行。您应该根据您的机器拥有的内核数来设置进程数。

    【讨论】:

    • 如果我的 fn 不是 CPU 密集型并等待多个数据库查询怎么办?
    • @ravi 本地数据库查询?因为那是 CPU 密集型的
    • @ravi 即使是远程查询也是 cpu 密集型的(对于服务器而言),同时运行大量查询时可能会降低效率。使用参数processes 为您的设置找到一个合适的数字。
    猜你喜欢
    • 2010-10-25
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多