韩漫免费漫画在线观看方法,《好好疼爱里面》免费看,年轻漂亮的女士护士内衣,妈妈醉酒后把我当爸爸电视剧

文章 > Python高级 > 使用多线程让Python应用飞起来

使用多线程让Python应用飞起来

Python

头像

Python

2019-05-30 17:06:456194浏览 · 0收藏 · 0评论

很多时候,我们最终在Python中编写代码来执行远程请求或读取多个文件或对某些数据进行处理。在很多这种情况下,我看到程序员使用一个简单的程序员for loop,需要永远完成执行。例如:

import requests
from time import time
url_list = [
    "https://via.placeholder.com/400",
    "https://via.placeholder.com/410",
    "https://via.placeholder.com/420",
    "https://via.placeholder.com/430",
    "https://via.placeholder.com/440",
    "https://via.placeholder.com/450",
    "https://via.placeholder.com/460",
    "https://via.placeholder.com/470",
    "https://via.placeholder.com/480",
    "https://via.placeholder.com/490",
    "https://via.placeholder.com/500",
    "https://via.placeholder.com/510",
    "https://via.placeholder.com/520",
    "https://via.placeholder.com/530",
]
def download_file(url):
    html = requests.get(url, stream=True)
    return html.status_code
start = time()
for url in url_list:
    print(download_file(url))
print(f'Time taken: {time() - start}')

Output:

<--truncated-->
Time taken: 4.128157138824463

这是一个理智的示例,代码将打开每个URL,等待它加载,打印其状态代码,然后转到下一个URL。这种代码非常适合多线程。

现代系统可以运行大量线程,这意味着您可以使用非常低的开销一次完成多个任务。为什么我们不尝试使用它来使上述代码更快地处理这些URL?

我们将利用ThreadPoolExecutor从concurrent.futures库。它非常易于使用。让我向您展示一些代码,然后解释它是如何工作的。

import requests
from concurrent.futures import ThreadPoolExecutor, as_completed
from time import time
url_list = [
    "https://via.placeholder.com/400",
    "https://via.placeholder.com/410",
    "https://via.placeholder.com/420",
    "https://via.placeholder.com/430",
    "https://via.placeholder.com/440",
    "https://via.placeholder.com/450",
    "https://via.placeholder.com/460",
    "https://via.placeholder.com/470",
    "https://via.placeholder.com/480",
    "https://via.placeholder.com/490",
    "https://via.placeholder.com/500",
    "https://via.placeholder.com/510",
    "https://via.placeholder.com/520",
    "https://via.placeholder.com/530",
]
def download_file(url):
    html = requests.get(url, stream=True)
    return html.status_code
start = time()
processes = []
with ThreadPoolExecutor(max_workers=10) as executor:
    for url in url_list:
        processes.append(executor.submit(download_file, url))
for task in as_completed(processes):
    print(task.result())
print(f'Time taken: {time() - start}')

Output:

<--truncated-->
Time taken: 0.4583399295806885

我们的代码加速了近9倍!我们甚至没有做任何超级参与。如果有更多网址,性能优势会更高。

那么发生了什么?当我们调用时,executor.submit 我们正在向线程池添加新任务。我们将该任务存储在进程列表中。稍后我们迭代过程并打印出结果。

该as_completed方法在完成后立即从进程列表中生成项(任务)。任务可以进入完成状态有两个原因。它已完成执行或已取消。我们也可以传入一个timeout参数as_completed,如果任务花费的时间超过了那个时间段,那么as_completed就会产生这个任务。

您应该多探索多线程。对于琐碎的项目,它是加快代码速度的最快方法。如果你想学习,请阅读官方文档https://docs.python.org/3/library/concurrent.futures.html,非常有帮助.

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

CSGO暴躁妹妹免费观看电视剧| 窝窝影院在线观看免费播放电视剧 | 久久婷婷五月综合色国产香蕉 | 《性88分钟》| 黄瓜成视频人APP| 亚洲乱熟女一区二区三区山口珠理| 多村野史| 《再来一次好吗》免费观看| 呱呱爆料网每日爆料| 盒子动漫| 白色变态董丝超薄开档连身袜| 高三妈妈用性缓解孩子压力| 《枕边欢情》电影免费观看| 村长撕开乳罩吸奶头在线观看| 男生把困困放在女生定眼| 《大度》韩版免费| 破浪男女在线观看电影完整版| (NP、高H、纯肉)高H高辣| 第9节 妈妈女儿齐上阵 | 韩剧在办公室做饭的电影影| 成品动漫网站入口网页版怎样 | 女人高潮抖动多久能恢复| 吻戏| 妈妈がだけの心に漂う| 女被扒开腿狂躁XXXXX视频| 巨乳美女| 她开始慢迎迎合张行长笔趣阁| 老阿姨高清免费观看电视剧| 爸妈离婚女儿成爸爸的女人| 电影《乳妓》在线观看| 色搞| 韩国咬住奶头的乳三级| 少妇高潮久久久久久| 男女啪啪做爰高潮全过有多动症| 妈妈你真棒插曲快来救救我电影| 自行车小故事| 我被5个男人躁一夜不收我怎么办| 免费B站看大片真人电视剧| 中文在线字幕免费观看电视剧 | 二人努力生猴子免费观看| 泰国电影《初次深交流》