IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python 多线程和多进程 -> 正文阅读

[Python知识库]Python 多线程和多进程

Python多线程的简单介绍和使用

多线程和多进程的效果是不一样的。

一,多线程 是用来提高io的利用率的,也就是你的程序需要频繁的进行io操作比如如制作密码字典。它并不能提高程序的计算速率,在没有使用多进程的情况下 即使你开启1000个线程它门也只能共用一个cpu核心,比如你的cpu是4核8线程的 ,那么这1000个线程加起来也只能占用cpu的4分之一也就是25%。

python中多线程模块叫 threading
通常使用的是threading中的Thread
你可以通过类的继承来创建自己的多线程。

常见参数:
Thread(target , daemon=False , args =[])
target:目标函数,我自己通常使用lambda表达式,方便传参
args:传参列表,可以是列表,字典,元组,等可迭代的数据类型,个数要与目标函数形式参数数量一致
daemon:是否跟随主进程默认值False,True:主进程执行完成后,子线程自动退出 ; False:主进程执行完成后,子线程仍然可以存活,主进程等待所有线程完成后才退出。
代码实现:

#比较规范的写法
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
'''
Author:歧路学士
Date:2021年12月2日18:16:59
'''
import time
from threading import Thread

def task1(): 
    print('task1 start!')
    while True: 
        print('task1')
        time.sleep(1)    
        
def task2(): 
    print('task2 start!')
    while True: 
        print('task2')
        time.sleep(1)
        
def main():
    p1=Thread(target=task1)
    p1.start()
    p2=Thread(target=task2)
    p2.start()
    

if __name__ == '__main__':
    main()

比较随意的写法:

#比较随意的写法
import time
from threading import Thread

def task1(): 
    print('task1 start!')
    while True: 
        print('task1')
        time.sleep(1)    
        
def task2(): 
    print('task2 start!')
    while True: 
        print('task2')
        time.sleep(1)
        
Thread(target=task1).start()
Thread(target=task2).start()
    

传参数:
方式一:使用lambda表达式(很简单,实用)
直接使用lambda函数来调用函数

#比较正规的写法
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
'''
Author:歧路学士
Date:2021年12月2日18:28:10
'''
import time
from threading import Thread

def task1(data): 
    print('task1 start!')
    while True: 
        print(data)
        time.sleep(1)    
        
def task2(data): 
    print('task2 start!')
    while True: 
        print(data)
        time.sleep(1)
        
def main():
    p1=Thread(target=lambda:task1('t1'))
    p1.start()
    p2=Thread(target=lambda:task2('t2'))
    p2.start()
    

if __name__ == '__main__':
    main()

方式二:使用参数 argv,将参数以元组或列表的方式传入
建议使用列表传参,使用元组的话要是只有一个参数必须写成(arg1, )

#比较正规的写法
#比较正规的写法
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
'''
Author:歧路学士
Date:2021年12月2日18:30:19
'''
import time
from threading import Thread

def task1(data,data2): 
    print('task1 start!')
    while True: 
        print(data,data2)
        time.sleep(1)    
        
def task2(data): 
    print('task2 start!')
    while True: 
        print(data)
        time.sleep(1)

               
def main():
    p1=Thread(target=task1,args=['t1','t12'])
    p1.start()
    p2=Thread(target=task2,args=('t2',))	
    #只有一个参数使用元组传参后面必须加一个空的参数,使用列表则不需要
    #('t2')这样的写法是错误的,它会把字符串拆分,组成新的元组
    p2.start()


if __name__ == '__main__':
    main()

方式三:使用全局变量
全局变量也常用于线程之间的通信

#比较正规的写法
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
'''
Author:歧路学士
Date:2021年12月2日18:49:43
'''
import time
from threading import Thread

def task1(): 
    global data1
    print('task1 start!')
    while True: 
        print(data1)
        time.sleep(1)    
        
def task2(): 
    global data2
    print('task2 start!')
    while True: 
        print(data2)
        time.sleep(1)

               
def main():
    p1=Thread(target=task1)
    p1.start()
    p2=Thread(target=task2)
    p2.start()


data1='t1'
data2='t2'

if __name__ == '__main__':
    main()

==================================================================================================================

二,多进程 是用来提高计算能力的,可以同时使用电脑的多个核心,,前提是你的电脑得有多个核心,一般一个进城占用一个核心,当你的程序的计算量很大的话可以使用多进程进行加速,但是进程数不宜超过物理核心数,否则会很卡。

注意:
使用多进程必须使用规范格式定义main函数,通常在main函数中启动多进程
不能使用lambda表达式来指明函数

def main():
	pass

if __name__ == '__main__':
    main()

参数:与多线程差不多,

代码:

#比较正规的写法
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
'''
Author:歧路学士
Date:2021年12月2日19:05:28
'''
#比较正规的写法
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
'''
Author:歧路学士
Date:2021年12月2日19:05:28
'''
import time
from multiprocessing import Process

def task1(data): 
    print('task1 start!')
    while True: 
        print(data)
        time.sleep(1)    
        
def task2(data): 
    print('task2 start!')
    while True: 
        print(data)
        time.sleep(1)
        
        
def main():
    p1=Process(target=task1,args=('t1',))
    p1.start()
    p2=Process(target=task2,args=['t2'])
    p2.start()
    

if __name__ == '__main__':
    main()

我现在的水平比较低,也就制作密码字典和破解密码,以及写爬虫的时候会用到多进程和多线程

个人不建议爬虫启用太多 进程和线程:可能会把目标给搞死!!!

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-03 12:59:47  更:2021-12-03 13:02:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:15:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码