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

Python 笔记03(多线程)

一 打开命令行,查看本机IP

windows + r

命令行输入:cmd + ipconfig

然后查看IPv4的地址:192.168.1*6.1

ipconfig

二 函数式多进程

from multiprocessing import Process
import os, timedef func(name):print('进程的ID:', os.getpid())print('父进程的ID:', os.getppid())print('当前进程的名称:', name)time.sleep(3)if __name__ == '__main__':# aprocess_lst = []for i in range(10):p = Process(target=func, args=(f'进程的名称为:{i}',))  # 默认调用init# 启动进程p.start()process_lst.append(p)for p in process_lst:p.join()    # 阻塞主进程,等待P进程执行完后继续print('主进程结束!')

三 继承式多进程

p.join() 等待子进程结束后才进行下一步的操作

from multiprocessing import Process
import time, osclass MyProcess(Process):def __init__(self, name):  # 初始化方法, 创建MyProcess时被调用Process.__init__(self)   # 调用父类的初始化self.name = name# 继承式必须重写run方法def run(self):print('进程的ID:', os.getpid())print('父进程的ID:', os.getppid())print('当前进程的名称:', self.name)time.sleep(3)if __name__ == '__main__':process_lst = []for i in range(10):p = MyProcess(f'进程的名称:{i}')p.start()process_lst.append(p)for p in process_lst:p.join()print('主进程执行完毕')

四 进程间通信 (使用队列的方式, queue)

from multiprocessing import Process, Queue
import os
import random# 入队的进程
class WriteProcess(Process):def __init__(self, name, q):Process.__init__(self)self.name = nameself.q = qdef run(self):print(f'进程的名称:{self.name}, 进程的ID:{os.getpid()}')# 入队操作for i in range(1, 6):x = random.randint(1000, 6666)print(f'入队元素:{x}')self.q.put(x)print('入队执行结束')# 出队的进程
class ReadProcess(Process):def __init__(self, name, q):Process.__init__(self)self.name = nameself.q = qdef run(self):print(f'进程的名称:{self.name}, 进程的ID:{os.getpid()}')# 入队操作for i in range(1, 6):print(f'出队元素---------->{self.q.get()}')  # get是队列的方法if __name__ == '__main__':# 主程序queue = Queue()  ## 创建子进程的对象write_process = WriteProcess('writer', queue)read_process = ReadProcess('reader', queue)# 启动进程write_process.start()read_process.start()

五 管道的当时做通信 (pipe)

1 需要在进程的init中配置:self.p = pipe 

2 数据发送使用:p.send(value)

3 数据接收使用: p.recv(value)

from multiprocessing import Process, Pipe
import osclass WriteProcess(Process):def __init__(self, name, pipe):Process.__init__(self)self.name = nameself.p = pipe  # pipe 是方法的局部变量,而self.p是类的实例属性,可以在类的任意方法中使用,而PIPE只能在init中使用def run(self):print(f'进程的名称:{self.name}, 进程的ID:{os.getpid()}')for i in range(1, 9):# 调用管道发送数据的方法: sendself.p.send(i)print(f'写入进程执行完毕')class ReadProcess(Process):def __init__(self, name, pipe):Process.__init__(self)self.name = nameself.p = pipedef run(self):print(f'进程的名称:{self.name}')for i in range(5):print(f'出队元素:{self.p.recv()}')  # recv()接收数据if __name__ == '__main__':#p1, p2 = Pipe()  # p1, p2指管道的两点,每一端对应一个进程wb = WriteProcess('writer', p1)rp = ReadProcess('reader', p2)# 启动进程wb.start()rp.start()

六 进程池

1 p.apply(run, ('任务' + str(i),))   # 同步执行

2 p.apply_async(run, ('任务' + str(i),))   # 异步执行

# 函数式多进程
from multiprocessing.pool import Pool
import os, time, randomdef run(name):start = time.time()  # 开始时间print(f'任务名称:{name}, 进程的ID:{os.getpid()}')time.sleep(random.choice([1, 2, 3, 4, 5]))  # 注意choice 要有()end = time.time()print(f' ________________+ 任务名称:{name}, 进程的ID:{os.getpid()}, 耗时:{round(end - start, 2)}')if __name__ == '__main__':p = Pool(5)  # 5个进程的进程池# 5个进程,10个任务for i in range(10):# p.apply_async(run, ('任务' + str(i),))   # 异步执行p.apply(run, ('任务' + str(i),))   # 同步执行p.close()p.join()print('主进程结束')

http://www.lryc.cn/news/175522.html

相关文章:

  • mysql-4:SQL的解析顺序
  • 如何通过优化Read-Retry机制降低SSD读延迟?
  • matlab自动生成FPGA rom源码
  • 消息队列(RabbitMQ+RocketMQ+Kafka)
  • python判断语句
  • C# 虚方法
  • 微信小程序,动态设置三级联动, 省市区街道
  • Learn Prompt- Midjourney 图片生成:Image Prompts
  • 基于微信小程序的健身房私教预约平台设计与实现(源码+lw+部署文档+讲解等)
  • 安卓Compose(二)
  • TCP 和 UDP哪个更好
  • Spring Boot 如何实现单点登录(SSO)
  • C#中的(++)和(--)运算符
  • SVG鼠标漫游
  • 关于Github报SSL_ERROR_SYSCALL的解决方案
  • Redis 集群搭建教程
  • 图形处理软件Photoshop Elements 2020 mac中文版 ps简化版
  • opencv for unity package在unity中打开相机不需要dll
  • [Linux入门]---进程状态
  • 腾讯mini项目-【指标监控服务重构】2023-08-29
  • opencv 常用的滤波器及应用技巧
  • 【PyTorch攻略(1/7)】 张量基本语法
  • 什么是Jmeter ?Jmeter使用的原理步骤是什么?
  • Mac 通过 brew安装的 ffmpeg 切换版本
  • 【Spring Boot】实战:实现数据缓存框架
  • MySQL数据类型之JSON
  • nginx_0.7.65_00截断_nginx解析漏洞
  • 建站百科:HTTP返回状态码是什么?
  • 人像摄影简记
  • 【Java 基础篇】Java 实现模拟斗地主游戏