【问题标题】:Multiprocessing and lists python多处理和列表 python
【发布时间】:2020-05-15 02:54:18
【问题描述】:

我在这里提出另一个简单的问题,我真的需要一些帮助。我有一个网站列表,我想通过请求浏览它们。但是,为了使这更快,我想使用多处理。我该如何执行?

例子:

import requests
import threading
from threading import Thread

list_ex = ["www.google.com","www.bing.com","www.yahoo.com"]
def list_request():
  for item in list_ex:
    ex = request.get(list_ex)
    print(ex.text)

由于我有 100 多个这样的网站,我怎么能做到这一点,但要进行多重处理 :)

【问题讨论】:

  • Python 中的 Mukti 线程不会给你更好的性能......甚至可能是糟糕的性能,因为 python 没有真正打开多线程它只是暂停一个线程运行另一个线程并返回第一个线程.
  • 好吧,如果我可以在多个线程上运行这个进程,它会比在一个线程上提供更好的性能,因为它一次迭代更多的列表值。
  • 你的意思是多处理吗?
  • 多处理或线程。

标签: python python-requests multiprocessing


【解决方案1】:
  • 您可以使用 DASK 进行多处理 ..

它将使用你所有的系统核心......而传统的python只使用一个核心

Dask Official ..... Dask Wikipedia

【讨论】:

  • 不过,在这种情况下,使用 dask 可能是矫枉过正。对于简单的并行化,标准库提供了多线程和多处理设施。
【解决方案2】:

这里可以选择多线程,因为获取 url 不是 CPU 密集型的,而是 I/O 密集型的。因此,单个进程可以有多个线程并行运行requests.get

import requests
from multiprocessing.pool import ThreadPool

def read_url(url):
    return requests.get(url).text


urls = ["www.google.com","www.bing.com","www.yahoo.com"]
with ThreadPool() as pool:
    texts = pool.map(read_url, urls)

您可以通过将ThreadPool 替换为Pool 来使用多处理。对于提供的三个 URL,我得到了与 PoolThreadPool 相似的运行时,并且两者都比在循环中顺序运行 read_url 更快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 2020-05-15
    • 2016-05-10
    相关资源
    最近更新 更多