# python study day9
# 进程和线程。实现多任务的方式
# 1、多进程模式
# 2、多线程模式
# 3、多进程+多线程模式
# multiprocessing 跨平台多进程模块。Unix/Linux/Mac环境下可以使用fork创建子进程
# from multiprocessing import Process
# import os
# def run_proc(name): # 子程序要执行的代码
# print('Parent process %s (%s)...' % (name, os.getpid))
# if __name__ == '__main__':
# print('Parent process %s.' % os.getpid)
# p = Process(target=run_proc, args=('test',)) # 通过执行函数和参数创建子进程
# print('Child process will start.')
# p.start() # 开始启动
# p.join() # 等待子进程执行结束
# print('Child process end.') #>>>
# # Parent process 928.
# # Child process will start.
# # Run child process test (929)...
# # Process end.
# from multiprocessing import Pool
# import os, time, random
# def long_time_task(name):
# print('Run task %s (%s)...' % (name, os.getpid()))
# start = time.time()
# time.sleep(random.random() * 3)
# end = time.time()
# print('Task %s runs %0.2f seconds.' % (name, (end- start)))
# if __name__ == '__main__':
# print('Parent process %s.' % os.getpid())
# p = Pool(4) # 使用进程池批量创建子进程
# for i in range(5):
# p.apply_async(long_time_task, args=(i,))
# print('Waiting for all subprocesses done...')
# p.close() # 需要在join之前,调用后不能再添加process
# p.join() # 同步,等待所有子进程结束
# print('All subprocesses done.') #>>>
# Parent process 22900.
# # Waiting for all subprocesses done...
# # Run task 0 (19656)...
# # Run task 1 (10880)...
# # Run task 2 (11372)...
# # Run task 3 (19780)...
# # Task 2 runs 0.35 seconds.
# # Run task 4 (11372)...
# # Task 0 runs 0.83 seconds.
# # Task 3 runs 1.03 seconds.
# # Task 4 runs 1.10 seconds.
# # Task 1 runs 2.25 seconds.
# # All subprocesses done.
# 进程间的通信通过Queue、Pipes实现
# from multiprocessing import Process, Queue
# import os, time, random
# def write(q): # 写数据进程执行代码
# print('Process to write: %s' % os.getpid())
# for value in [1, 2, 3]:
# print('put %s to queue...' % value)
# q.put(value)
# time.sleep(random.random())
# def read(q):
# print('process to read: %s' % os.getpid())
# while True:
# value = q.get(True)
# print('get %s from queue.' % value)
# if __name__ == '__main__':
# q = Queue() # 父进程创建Queue, 并传给各个子进程
# pw = Process(target=write, args=(q,))
# pr = Process(target=read, args=(q,))
# pw.start() # 启动子进程pw, 写入
# pr.start() # 启动pr, 读取
# pw.join()
# pr.terminate() # pr进程死循环,强行终止 >>>
# # Process to write: 9468
# # put 1 to queue...
# # process to read: 18696
# # get 1 from queue.
# # put 2 to queue...
# # get 2 from queue.
# # put 3 to queue...
# # get 3 from queue.
# 多线程,python提供低级的_thread和高级的threading模块,常用threading
# import time,threading
# def son_thread_task():
# for i in range(5):
# print(threading.current_thread().name, i)
# time.sleep(1)
# print(threading.current_thread().name, 'running')
# son_thread = threading.Thread(target=son_thread_task, name='sonthread')
# son_thread.start()
# son_thread.join()
# print(threading.current_thread().name, 'end') #>>>
# # MainThread running
# # sonthread 0
# # sonthread 1
# # sonthread 2
# # sonthread 3
# # sonthread 4
# # MainThread end
# Lock 线程安全
# import time, threading
# balance = 0 # 全局银行存款变量
# lock = threading.Lock()
# def balance_saveAndGet(money):
# global balance
# balance = balance + money
# balance = balance - money
# def run_thread(money):
# for i in range(2000000):
# lock.acquire() # 获取锁后再修改
# try:
# balance_saveAndGet(money)
# finally:
# lock.release() # 释放锁。with threading.Lock() as lock:……
# def main():
# t1 = threading.Thread(target=run_thread,args=(5,))
# t2 = threading.Thread(target=run_thread,args=(8,))
# t1.start()
# t2.start()
# t1.join()
# t2.join()
# print('balance now is:', balance)
# if __name__ == '__main__':
# main()'
# python 因为解析器设计时有GIL全局锁导致多线程无法利用多核,不过可以考虑多进程代替
# ThreadLocal 全局线程变量,每个线程只能读写自己线程,互不干扰。
# 解决了线程内多函数之间相互传递参数的问题。
# import threading
# local_school = threading.local() # 创建全局ThreadLocal对象, 可以看作是dict
# def process_student():
# std = local_school.student # 获取当前线程的student
# print(std, threading.current_thread().name)
# def process_thread(name):
# local_school.student = name # 使用ThreadLocal绑定线程的student
# process_student()
# t1 = threading.Thread(target=process_thread, args=('Alice',),name='threada')
# t2 = threading.Thread(target=process_thread, args=('Bob',),name='threadb')
# t1.start()
# t2.start()
# t1.join()
# t2.join() #>>>
# # Alice threada
# # Bob threadb
# 单线程的异步编程模型称为协程
# 在Thread和Process中当应优选Process
# Process可以分布到多台机械上,Thread最大只能分布到多个CPU上
# managers模块通过网络暴露Queue可以实现分布式进程
# task_worker.py
# import time, sys, queue
# from multiprocessing.managers import BaseManager
# # 创建类似的QueueManager:
# class QueueManager(BaseManager):
# pass
# # 由于这个QueueManager只从网络上获取Queue,所以注册时只提供名字:
# QueueManager.register('get_task_queue')
# QueueManager.register('get_result_queue')
# # 连接到服务器,也就是运行task_master.py的机器:
# server_addr = '127.0.0.1'
# print('Connect to server %s...' % server_addr)
# # 端口和验证码注意保持与task_master.py设置的完全一致:
# m = QueueManager(address=(server_addr, 5000), authkey=b'abc') #authkey连接标识
# # 从网络连接:
# m.connect()
# # 获取Queue的对象:
# task = m.get_task_queue()
# result = m.get_result_queue()
# # 从task队列取任务,并把结果写入result队列:
# for i in range(10):
# try:
# n = task.get(timeout=1)
# print('run task %d * %d...' % (n, n))
# r = '%d * %d = %d' % (n, n, n*n)
# time.sleep(1)
# result.put(r)
# except Queue.Empty:
# print('task queue is empty.')
# # 处理结束:
# print('worker exit.')
相关推荐
【廖雪峰Java】Java基础知识
詹姆斯·高斯林(James Gosling)对于float类型,需要加上f后缀。// 科学计数法表示的3.14x10^38// 错误:不带f结尾的是double类型,不能赋值给float。
廖雪峰Python 2.X 教程
Python简介 Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。 现在,全世界差不多有600多种编程语言,但流行的编程语言也就那么20来种。如果你听说过TIOBE排行榜,你就能知道编程语言的大致流行程度。这是最近10年最常用的10种编程语言的变化图: 总的来说,这几种编程语言各有千秋。C语言是可以用来编写操作
Python廖雪峰教程学习笔记:Day3
前言 养成一个好的习惯只需要坚持21天,Day3 条件判断和循环 条件判断与循环在编程实现中都很常见,比如,输入用户的年龄,根据年龄的大小可以打印出不同的内容,该功能的实现可以使用if语句实现: if - else语句,如果if判断是False,则执行else后面的内容,否则执行if后面的内容。 if - elif - else语句,可以有多个判断语句。 ⚠️注意:1⃣️在判断语句的后面不要...
Python教父凉了?!网友热议:看完廖雪峰,什么都做不了!
市面上有很多大牛老师,斯坦福大学人工智能教授吴恩达,Python技术专家廖雪峰,他们的课广受赞誉,常被称作“教科书”级别的入门课程。 但是仍有很多人说,“大牛一行字就够我琢磨1小时了。” 很多人在学习新知识前,状态都是这样的: 其实如果是新手,只学会了入门级教程,那约等于什么都写不出来。 就以Python为例,为了写出解决实际问题的爬虫,你还需要:简单的网络基础,包括套接字...
Ghost备份还原Win10全攻略:从老电脑迁移到新硬盘,ESP分区处理是关键
本文详细介绍了使用Ghost工具将Win10系统从旧电脑迁移到新硬盘的全过程,特别强调了ESP分区的关键处理方法。通过分步指导备份、分区准备、系统还原和引导修复,帮助用户实现无缝系统迁移,解决常见问题如启动失败和驱动兼容性。
CAN通信:EB中配置CAN驱动,配置参数解析
以S32K314芯片说明,其他芯片不同,参数配置也有差异。
Python廖雪峰教程学习笔记:Day9
前言 养成一个好的习惯只需要坚持21天,Day9 访问限制 由上一节定义的Student类来看,我们可以在外部代码修改name、score属性。比如我们想要修改对象的成绩,可以直接对score赋值。 bart.score = 60 print(bart.score) # 60 如果要让内部的属性不被外部访问和修改,我们可以在属性的名称前面加上两个下划线__,这样就变成了一个私有对象,只有内部可以...
从USB相机标定到Aruco码精准定位:基于aruco-ros的机器人视觉实践
本文详细介绍了基于aruco-ros的机器人视觉实践,从USB相机标定到Aruco码精准定位的全流程。通过实战案例和优化技巧,展示了Aruco码在机器人导航中的高精度位姿识别能力,帮助开发者快速实现毫米级视觉定位系统。
廖雪峰Python学习笔记day10
学习笔记day9 # python study day10 # 正则表达式 # \d # 匹配一个数字 # \w # 匹配一个字母或数字 # . # 匹配任意字符 # * # 匹配0个或任意多个字符 # + # 匹配至少一个字符 # ? # 匹配0个或1个字符 # {n} # 匹配n个字符 # {n, m} # 匹配n-m个字符 # \s # 匹配一个空格(包括Tab空白符),\s+ 表示至少一个空格 # [] # 匹配范围,[0-9a-zA-Z\_] 可以匹配一个数字、字母或下划线 # A|B # 匹配
Android面试必考问题:Android性能优化最全面试题及参考答案(8万字长文)
Android 中的 OOM(Out Of Memory,内存溢出)异常是指应用程序在运行过程中,由于申请的内存空间超过了系统所能提供的最大内存限制而导致的错误。在 Android 中,内存泄漏是指应用中的某些对象在不再被使用后,仍然被其他对象持有引用,导致这些对象无法被垃圾回收器回收,从而占用内存空间,随着时间的推移可能会导致应用内存不足,甚至崩溃。在一次开发 Android 应用的过程中,我发现应用在长时间运行后会出现内存占用过高的情况,导致应用变得卡顿,甚至可能会被系统强制关闭。
RK3588开发笔记-MIPI-CSI接口视频解码芯片XS9922B调试
Rockchip RK3588 是一款高性能的处理器,支持多种摄像头接口,包括 MIPI(Mobile Industry Processor Interface)接口。MIPI是一种用于移动设备和嵌入式系统中的摄像头、显示器和其他传感器设备的串行接口标准。MIPI是MIPI联盟发起的为移动应用处理器制定的开放标准。CSI-2(Camera Serial Interface 2)是MIPI 联盟定义的另一种高速接口,主要用于摄像模组和处理器之间的连接。
廖雪峰Python学习笔记day15
学习笔记day14 # python study day15 # 一般不同平台邮件收发过程 # 发件人 -> MUA(Mail User Agent——邮件用户代理) -> # MTA(Mail Transfer Agent——邮件传输代理) -> 若干个MTA -> # MDA(Mail Delivery Agent——邮件投递代理) <- MUA <- 收件人 # SMTP 邮件发送协议,python提供 email(负责构造邮件)、smtplib(负责发送邮件)模
提示工程架构师干货:AI上下文工程在社交媒体舆情溯源中的应用
在舆情溯源中,“上下文”不是单一的“文本内容”,而是多维度、多源的信息集合溯源时间:从事件爆发到找到源头,只用了24小时(传统方法需要3-5天);溯源准确性:100%(通过人工验证确认);后续行动:品牌X发布了澄清声明,揭露了品牌Y的恶意行为,舆情在48小时内平息。社交媒体舆情溯源是一个“复杂的系统工程”,需要结合数据、模型、上下文理解。AI上下文工程的出现,让我们从“被动应对”转向“主动溯源”,从“模糊判断”转向“精准分析”。
廖雪峰Python学习笔记day11
学习笔记day10 # python study day11 # collections 内建集合模块 # namedtuple 创建自定义tuple对象,规定tuple元素个数,使用属性引用元素 # from collections import namedtuple # Point = namedtuple('Point', ['x', 'y']) # p = Point(1, 3) # p2 = Point(-1, -3) # print(p.x, p.y) #>>> 1 3 #
如何合法抓取TikTok视频信息和评论:完整Python爬虫教程
尽管TikTok没有开放的公共API来直接抓取视频内容和评论,开发者仍然可以通过合法的方式使用第三方API工具来获取公开数据。无论使用什么工具,都应当严格遵守TikTok的使用条款和当地的隐私法规,确保数据抓取行为符合规定。通过本文介绍的TikTok-Api库和Python技术,你可以合法地抓取公开的视频信息和评论,并进行数据存储与分析。使用这些技术时,务必确保抓取行为不会侵犯用户隐私,并遵守平台的API使用规定。
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
廖雪峰Python学习笔记day1
学习参考自 廖雪峰Python教程 # 廖雪峰学习python 3.x # vscode 快捷当行注释 CTRL + / 或者 CTRL + K + C # vscode 快捷取消注释 CTRL + / 或者 CTRL + K + U # vscode 快捷下方插入行 CTRL + Enter # 交互模式下('>>>')输入一行代码,执行一行 # 33 + 2 # >>> 35 # 命令行模式下,直接运行.py文件,一次性执行所有代码 # print(33.1*3)
华为的C语言编程规范.pdf
华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。
Python廖雪峰教程学习笔记:Day2
前言 养成一个好的习惯只需要坚持21天,Day2 使用list和tuple list 列表 list是一种有序的集合,可以随时添加和删除其中的元素。它的表示用[]。list = [] 变量name就是一个list。用len()函数可以得到list的长度,即该list当中有多少个元素。 list中元素的访问采用索引,⚠️注意索引是从0开始的,当索引超出list的长度,Python会报一个Inde...
大中型超市收银系统(可直接运行)
光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开
锂电池充电器电路设计 里面有电路
锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。
廖雪峰 Python教程 学习笔记_Day01
廖雪峰 Python教程 学习笔记_Day02
廖雪峰Python教程day1-day9总结
源码见廖雪峰github-day9,目前也只能是对源码进行理解,如果要自己写出来这些代码,还是很困难的。 一、基本结构 首先,是一个webapp最基本的结构 async def init(): await orm.create_pool(host='127.0.0.1', port=3306, user='root', password='', db='awesome') app ...
Python廖雪峰教程学习笔记:Day5
前言 养成一个好的习惯只需要坚持21天,Day5 高级特性 切片 迭代 列表生成器 生成器 切片 取一个list和tuple的部分元素可以用切片快速实现。 L为一个list,L[0:3]表示从索引0开始取到索引3为止,但不包括索引3,即索引0,1,2三个元素。 如果第一个索引是0,还可以省略为L[:3],运行结果和L[0:3]一样。 如果索引从1开始,取出两个元素则可以写作L[1:3],运行...
Python廖雪峰教程学习笔记:Day15
前言 养成一个好的习惯只需要坚持21天,Day15 多进程 Unix/Linux操作系统提供了一个fork()系统调用。一般我们遇到的函数都是调用一次便返回一次,这里的fork()调用一次返回两次。因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程),然后,分别在父进程和子进程内返回。 子进程永远返回0,而父进程返回子进程的ID。 fork调用,一个进程在接到新任务时就可以复制出一个子...
Python廖雪峰教程学习笔记:Day14
前言 养成一个好的习惯只需要坚持21天,Day14 什是JSON? JSON是轻量级的文本数据交换格式,指的是 JavaScript 对象表示法(JavaScript Object Notation),类似XML但又比 XML 更小、更快,更易解析。 JSON语法 JSON数据的书写格式是:"名称":“值”,例如: "name":"汤姆" JSON的值可以是:数字、字符串、逻辑值、数组、对象和n...
Python廖雪峰教程学习笔记:Day7
前言 养成一个好的习惯只需要坚持21天,Day7 隔了几天没有写博客记录自己的学习。果然养成一个好的习惯不容易,丢掉一个好的习惯确是轻而易举,我不知道自己能坚持这个习惯多久,但是我会把每天写一篇学习博客的事情放在心上。自己写的博客可能不能帮助别人学到什么,但是这种总结归纳从一定程度上促进了自己的进步,加油! 匿名函数 有时候,为了减少代码,我们可以直接传入匿名函数,不需要显式的定义函数。在Pyth...
Python廖雪峰教程学习笔记:Day4
前言 养成一个好的习惯只需要坚持21天,Day4 函数 编程中,函数的调用、定义在一定程度上可以简化功能的实现,降低程序的复杂度。 调用函数 Python中内置了许多有用的函数,我们在调用一个内置函数的时候,需要知道函数的名称和参数。 内置函数-Python 3.7.6文档 调用abs()函数: 调用函数的数量,如果传入的参数数量不对,会报TypeError错误: 如果传入参数的数量是对的,但...

2238



被折叠的 条评论
为什么被折叠?



