当前位置: 首页 > article >正文

python面试篇-多并发详解(多线程,多进程,协成整理)---一篇搞定

1. 多线程处理IO密集型任务优势

1.1 GIL对python多线程的影响?

编写一个多线程抓取网页的程序

import requests
import threading
import time

def time_decorator(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        res = func(*args, **kwargs)
        end = time.time()
        print("run func {0} used time for {1}".format(func.__name__, end-start))
        return res
    return wrapper
def request_url(url):
    try:
        response = requests.get(url)
        print("response status code", response.status_code)
    except Exception as e:
        print("error fetch",  e)
@time_decorator
def multi_thread(urls):
    ts = []
    for url in urls:
        t = threading.Thread(target=request_url, args=url)
        t.start()
        ts.append(t)

    for t in ts:
        t.join()
@time_decorator
def single_fetch(urls):
    for url in urls:
        request_url(url)

@time_decorator
def multi_process(urls):
    with multiprocessing.Pool(processes=len(urls)) as pool:
        results = pool.map(request_url, urls)
@time_decorator
def multi_process(urls):
    processes = []
    for url in urls:
        p = multiprocessing.Process(target=request_url, args=(url,))
        processes.append(p)
        p.start()

    for p in processes:
        p.join()
if
 __name__ == '__main__':
    urls = [
        "http://example.com",
        "https://httpbin.org/get",
        "https://www.python.org",
        "https://www.google.com"
    ]
    single_fetch(urls)
    multi_process(urls)
    multi_thread(urls)
run func single_fetch used time for 6.238506555557251
run func mult

http://www.kler.cn/a/448411.html

相关文章:

  • airflow docker 安装
  • 54、库卡机器人轴的软限位设置
  • 简洁IIC协议讲述
  • LeetCode 热题 100_K 个一组翻转链表(31_25_困难_C++)(四指针法)
  • aosp15 - Activity生命周期切换
  • libmodbus安装使用
  • 南京观海微电子----单片机的中断系统
  • 使用JavaScript获取商品详情接口:一个实用的指南
  • GO--堆(have TODO)
  • outlook smtp 发送邮件
  • Android-Glide缓存机制
  • Zookeeper 底层原理解析
  • 大小端存储的问题
  • mysql-主从同步与读写分离
  • 机器学习之归纳学习
  • 【Mybatis-Plus】使用步骤 条件构造器 分页模型
  • Flink 简介和简单的demo
  • Linux -- 线程控制相关的函数
  • 判断实例化或推断的时机
  • 东方财富股吧发帖与评论爬虫
  • 【多维DP】力扣3122. 使矩阵满足条件的最少操作次数
  • CTF知识集-文件上传
  • 联合物种分布模型(JSDM)与Hmsc包:群落生态学数据分析与预测技术
  • Android adb查看某个进程的总线程数
  • C语言的指针和java的引用有什么区别?
  • 3 需求分析