python - 基础 多线程| 线程池 执行任务代码

1. 多线程 不带参数 

from threading import Thread

def func():
    for i in range(100):
        print('函数', i)

if __name__ == '__main__': #主程序
t
= Thread(target=func)# 创建多线程

t.start() #启动执行
for i in range(100):
print(
'主线程' , i)

 

2. 多线程带 参数

from threading import Thread

def func(name):
    for i in range(100):
        print(name, i)

if __name__ == '__main__': #主程序

    t1 = Thread(target=func, args=('',))# 创建多线程
    t1.start()  #启动执行

    t2 = Thread(target=func, args=('',))# 创建多线程
    t2.start()  #启动执行

 

3. 线程池 简单无循环

#创建线程池
from concurrent.futures import ThreadPoolExecutor

def func(name):
    for i in range(100):
        print(name, i)

if __name__ == '__main__':

    #创建线程池
    with ThreadPoolExecutor(10) as t:
        t.submit(func, '')
        t.submit(func, '')
        t.submit(func, '')
        t.submit(func, '')
        t.submit(func, '')
        t.submit(func, '')
        t.submit(func, '')
        t.submit(func, '')
        t.submit(func, '')
        t.submit(func, '')

 

4. 线程池循环

#创建线程池
from concurrent.futures import ThreadPoolExecutor

def func(name):
    for i in range(100):
        print(name, i)

if __name__ == '__main__':

    #创建线程池
    with ThreadPoolExecutor(10) as t:
        for i in range(1000):
            t.submit(func, f'第{i}个打印')

 

案例

 

import requests
import re
import json
from concurrent.futures import ThreadPoolExecutor

'''图片下载'''
def download(img_url):
    name = img_url.split('/')[-1] #切片图片标题
    print(f'{name}开始下载')
    resp = requests.get(img_url) #请求图片
    with open('img/' + name, mode='wb') as f: #设置保存路径
        f.write(resp.content) # 下载图片
    print('下载完成')

'''函数'''
def main():
    url = 'https://desk.zol.com.cn/bizhi/9911_119096_2.html'
    resp = requests.get(url)
    # 预加载  写规则
    obj = re.compile(r'var deskPicArr.*?= (?P<url>.*?);')
    # 在页面中查找
    res = obj.search(resp.text)
    # 查找到的结果提取出来 字符串
    res1 = res.group('url')
    # 将字符串转化为字典
    res1 = json.loads(res1)
    with ThreadPoolExecutor(10) as t: # 设置线程池
        for item in res1['list']: #循环
            img_size = (item.get('oriSize')) #得到尺寸
            img_url = (item.get('imgsrc')) # 得到图片地址
            # 替换获取所有图片尺寸
            img_url = img_url.replace('##SIZE##', img_size) #替换图片尺寸
            t.submit(download, img_url) #开始线程池 , img_url 参数 调用函数download ( img_url )

if __name__ == '__main__':
    main()

 

posted @ 2022-05-05 11:44  我在春天等伱  阅读(271)  评论(0)    收藏  举报