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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值