栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python 多线程-多进程

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python 多线程-多进程

import threading # 多线程
import multiprocessing # 多进程

进程和线程:

线程:是计算机中可以被cpu调度的最小单元;(真正在工作)

进程:是计算机资源分配的最小单元。(进程为线程提供资源)

一个进程中可以有多个进程,同一个进程中的线程可以共享此进程的资源。

通过 进程 和 线程 都可以将 串行 的程序变为 并发。

Python—requests模块详解 - 小L小 - 博客园

1 多线程
import time
import requests
import threading

"""
def func(a1, a2, a3):
        pass
t = threading.Thread(target=函数名, args=(11,22,33))
t.start()
"""
url_list = [
    ("东北F4模仿秀.mp4", "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300f570000bvbmace0gvch71o53oog"),
    ("卡特扣篮.mp4", "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f3e0000cv52fpn5t6p007e34qlg")
]

def task(file_name, video_url):
    res = requests.get(video_url)
    with open(file_name, mode='wb') as f:
        f.write(res.content)
    print(file_name,time.time())

for name, url in url_list:
    t = threading.Thread(target=task, args=(name, url))
    t.start()

线程创建:

1   首先导入 threading 这个模块
2   创建一个线程 t = threading.Thread(target=函数名, args=(11,22,33)) 如果这个函数需要传 入参数,需要加上后面的args=(11,22,33)
    args=(11,22,33) 意味着 函数 def func(a1, a2, a3): 有三个参数
    def func(a1, a2, a3):
        pass
3   此时只是创建了线程t, 线程还没有开始工作, 这时可以利用start()执行
      t.start()


2 多进程
import time
import requests
import multiprocessing

"""
def func(a1, a2, a3):
        pass
# 进程创建之后,在进程中还会创建一个线程
t = multiprocessing.Process(target=函数名, args=(11,22,33))
t.start()
"""
url_list = [
    ("东北F4模仿秀.mp4", "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300f570000bvbmace0gvch71o53oog"),
    ("卡特扣篮.mp4", "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f3e0000cv52fpn5t6p007e34qlg")
]

def task(file_name, video_url):
    res = requests.get(video_url)
    with open(file_name, mode='wb') as f:
        f.write(res.content)
    print(file_name,time.time())

if __name__ == '__main__':
    for name, url in url_list:
        t = multiprocessing.Process(target=task, args=(name, url))
        t.start()



3 GIL锁

GIL,全局解释器锁,是CPython 解释器特有的一个东西,让一个进程中同一时刻只能有一个线程可以被CPU调用。

  • 如果程序想利用 计算机的多核优势,让CPU同时处理一些任务,适合用多进程开发(即使资源开销大)。
  • 否则,适合用多线程开发。

总结:

  • 计算密集型,用多进程,例如:大量的数据计算【累加计算示例】
  • IO密集型,用多线程,例如:文件读写,网络数据传输【下载抖音示例】

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/461410.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号