【问题标题】:Python Multiprocessing How can I make script faster?Python Multiprocessing 如何使脚本更快?
【发布时间】:2017-04-17 14:29:19
【问题描述】:

Python 3.6

我正在编写一个脚本来自动检查以确保网站上的所有链接都能正常工作。

我有它的一个版本,但它运行缓慢,因为 python 解释器一次只运行一个请求。
我导入了 selenium 以将链接拉到列表中。我从 41000 个链接的列表开始。我摆脱了重复项,现在我的列表中只有 7300 个链接。我正在使用请求模块来检查响应代码。我知道多处理是答案,只是看到一堆不同的方法。哪个最适合我的需求?

我唯一需要记住的是,我不能同时运行多个线程,所以我不会在我们的服务器上发送我们的网络服务器线程请求。

这是检查与我正在尝试加速的 python 请求模块的链接的函数:

def check_links(y):
    for ii in y:
        try:
            r = requests.get(ii.get_attribute('href'))
            rc = r.status_code
            print(ii.get_attribute('href'), ' ', rc)
        except Exception as e:
            logf.write(str(e))
        finally:
            pass

【问题讨论】:

    标签: multithreading python-multiprocessing


    【解决方案1】:

    如果您只需要对列表中的所有项目应用相同的功能,您只需要使用进程池,并映射您的输入。这是一个简单的例子:

    from multiprocessing import pool
    
    def square(x):
        return {x: x**2}
    
    p = pool.Pool()
    results = p.imap_unordered(square, range(10))
    
    for r in results:
        print(r)
    

    在示例中我使用imap_unordered,但也请查看mapimap。您应该选择最符合您需求的那一款。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多