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

杭州拱墅区做网站线下推广有哪几种渠道

杭州拱墅区做网站,线下推广有哪几种渠道,东莞每日感染者25至25万,jsp做的网站难吗一、前言:为什么需要多任务处理? 在实际开发中,我们经常需要让程序同时执行多个任务,例如: 同时下载多个文件;在后台运行耗时计算的同时保持界面响应;并发处理网络请求等。 Python 提供了多种…

一、前言:为什么需要多任务处理?

在实际开发中,我们经常需要让程序同时执行多个任务,例如:

  • 同时下载多个文件;
  • 在后台运行耗时计算的同时保持界面响应;
  • 并发处理网络请求等。

Python 提供了多种方式来实现并发,其中 多线程 是一种简单且常用的手段。


二、进程与线程基本概念

概念定义特点
进程操作系统资源分配的基本单位拥有独立的内存空间,开销大
线程CPU 调度的基本单位,依附于进程存在共享所属进程的资源,创建销毁成本低

📌 注意

  • 一个进程至少有一个线程(主线程)。
  • 多个线程共享进程的资源,但也因此容易引发资源竞争问题。

三、串行 vs 多线程对比示例

示例 1:串行执行两个任务

import timedef task_one():for i in range(2):print("Task one 正在运行...")time.sleep(1)def task_two():for i in range(2):print("Task Two 正在运行...")time.sleep(1)if __name__ == '__main__':start_time = time.time()task_one()task_two()end_time = time.time()print(f"总耗时: {end_time - start_time} 秒")

📌 输出结果

Task one 正在运行...  
Task one 正在运行...  
Task Two 正在运行...  
Task Two 正在运行...  
总耗时: ~4秒  

💡 结论:两个函数是顺序执行的,总共耗时约 4 秒。


四、使用 threading 实现多线程

示例 2:多线程执行两个任务

import threading
import timedef task_one(task_name):for i in range(2):print(f"{task_name} 正在运行...")time.sleep(1)def task_two():for i in range(2):print("Task Two 正在运行...")time.sleep(1)if __name__ == "__main__":print("开始多线程执行任务")start = time.time()# 创建线程对象thread1 = threading.Thread(target=task_one, args=("任务线程1",))thread2 = threading.Thread(target=task_two)# 设置守护线程(可选)thread1.daemon = Truethread2.daemon = True# 启动线程thread1.start()thread2.start()# 阻塞主线程,等待子线程完成thread1.join()thread2.join()end = time.time()print(f"总耗时: {end - start} 秒")

📌 输出结果

任务线程1 正在运行...  
Task Two 正在运行...  
任务线程1 正在运行...  
Task Two 正在运行...  
总耗时: ~2秒  

💡 结论:两个任务并发执行,总耗时约为 2 秒,说明实现了并行效果。


五、线程的常见操作

1. 获取/设置线程名称

print(thread1.name)
thread1.name = "线程1"

⚠️ 注意setName() 方法已被弃用,推荐直接通过 .name 属性设置。

2. 守护线程(Daemon Thread)

thread1.daemon = True

📌 作用:当主线程结束时,守护线程也会自动退出。


六、线程调度的无序性

由于线程是由 CPU 时间片调度决定的,所以它们的执行顺序是不确定的。

示例 3:多线程打印顺序混乱

def task():time.sleep(1)print("当前线程是:", threading.current_thread().name)if __name__ == '__main__':for _ in range(10):t = threading.Thread(target=task)t.start()

📌 现象:输出可能乱序甚至穿插,比如“当前线程是”几个字还没打完,另一个线程就开始输出。

💡 原因print() 不是原子操作,在多线程并发时可能出现交错输出。


七、线程间资源共享与同步问题

示例 4:线程共享全局变量

li = []def writedata():for i in range(5):li.append(i)time.sleep(1)print("写入的数据是:", li)def readdata():print("读取的数据是:", li)if __name__ == "__main__":wd = threading.Thread(target=writedata)rd = threading.Thread(target=readdata)wd.start()wd.join()  # 确保先写后读rd.start()rd.join()

📌 说明:线程之间可以访问和修改同一个全局变量。

示例 5:资源竞争问题(Race Condition)

counter = 0def increment():global countertemp = countertemp += 1time.sleep(0.0002)counter = tempdef decrement():global countertemp = countertemp -= 1time.sleep(0.0002)counter = tempthreads = []if __name__ == "__main__":for _ in range(50):threads.append(threading.Thread(target=increment))for _ in range(50):threads.append(threading.Thread(target=decrement))for t in threads:t.start()for t in threads:t.join()print(f"期望值为 0,实际值为: {counter}")

📌 问题描述:最终结果不一定是 0,因为多个线程同时操作共享变量导致数据不一致。


八、线程同步机制 —— 使用互斥锁(Lock)

为了避免资源竞争,我们可以使用 threading.Lock() 来保护共享资源。

示例 6:使用 Lock 解决资源竞争问题

import threading
import timecounter = 0
lock = threading.Lock()def increment():with lock:global countertemp = countertemp += 1time.sleep(0.0002)counter = tempdef decrement():with lock:global countertemp = countertemp -= 1time.sleep(0.0002)counter = tempthreads = []if __name__ == "__main__":for _ in range(50):threads.append(threading.Thread(target=increment))for _ in range(50):threads.append(threading.Thread(target=decrement))for t in threads:t.start()for t in threads:t.join()print(f"期望值为 0,实际值为: {counter}")

📌 说明

  • with lock: 自动加锁和释放,避免死锁。
  • 锁必须成对出现,否则可能导致死锁或资源无法释放。

九、总结与建议

✅ 推荐做法

场景建议
需要并发执行任务使用 threading.Thread
控制线程生命周期使用 join() 等待线程结束
线程间通信与共享资源加锁(Lock)或使用队列(queue.Queue
资源安全访问使用上下文管理器 with lock:
简化线程管理可以使用 concurrent.futures.ThreadPoolExecutor

❗️注意事项

  • 避免在多个线程中同时修改共享变量,除非使用锁保护。
  • 多线程并非真正并行(GIL限制),适合 I/O 密集型任务。
  • 多线程不适合 CPU 密集型任务,考虑使用多进程或多线程 + 协程结合方案。
http://www.dtcms.com/wzjs/93380.html

相关文章:

  • 大学生网站设计作业百度一直不收录网站
  • 怎么看一个网站用什么程序做的百度网盘官方
  • wordpress百度推送代码加统计seo优化按天扣费
  • 7k7k小游戏大全网页版seo搜索优化专员
  • 给企业做免费的推广西安seo外包平台
  • 静态页优秀网站关键词优化排名费用
  • 广告公司可以做网站吗产品推广方案怎么做
  • 武汉h5网站建设百度推广有效果吗?
  • 无锡建设网站南宁seo推广
  • 内蒙古做网站公司百度推广电话销售话术
  • 做ptt网站seo关键词优化软件合作
  • 怎么制作网站卖电子文件世界军事新闻
  • 做php网站用的软件上海关键词排名搜索
  • 做期货主要看哪个网站东莞寮步最新通知
  • 大连 网站建设 有限公司网站制作的基本流程
  • 网页制作与网站建设课堂实录东莞疫情最新消息今天又封了
  • 重庆网站建设推广公司网站建设营销推广
  • 企业建设网站的方式有两种上海网站排名优化
  • 自己做的网站微信pc端显示乱码百度代发排名
  • 网站seo合同网站统计哪个好用
  • 南宁最高端网站建设网络营销的主要传播渠道是
  • 项目logo生成器橘子seo
  • python做网站 知乎界首网站优化公司
  • 网站制作公司智能 乐云践新宁波seo快速排名
  • 门户网站与搜索引擎的区别雷神代刷推广网站
  • 广告公司企业网站模板百度搜索广告怎么收费
  • 扬州网站建设公元国际seo优化的方法
  • 服务网站建设公司关键词优化公司前十排名
  • 做外贸的网站赚钱吗各大网址收录查询
  • WordPress与dz用户恭喜seo 推广