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

九亭 网站建设怎么成为百度推广代理商

九亭 网站建设,怎么成为百度推广代理商,怎么给网站做301,网站左侧悬浮代码文章目录 前言1.threading模块2.threading传递参数2.1args传递参数2.2kwargs传递参数2.3使用class封装线程函数 3.ThreadPoolExecutor 前言 在处理大量数据时,需要使用多线程,分布式等方法来提高速率。目前使用比较多的是python,但是我了解到…

文章目录

    • 前言
    • 1.threading模块
    • 2.threading传递参数
      • 2.1args传递参数
      • 2.2kwargs传递参数
      • 2.3使用class封装线程函数
    • 3.ThreadPoolExecutor

前言

在处理大量数据时,需要使用多线程,分布式等方法来提高速率。目前使用比较多的是python,但是我了解到阿里等大厂的安全开发开始用go语言来替换python了,所以建议后面再学习一下go语言。

1.threading模块

threading.Thread(target=目标函数):创建执行目标函数的线程
start():开始执行线程
join():等待线程结束

import threadingdef test_thread():print("aaa:")def test2_thread():print("bbb")def test():thread1 = threading.Thread(target=test_thread)thread2 = threading.Thread(target=test2_thread)thread1.start()thread2.start()thread1.join()thread2.join()if __name__ == '__main__':test()

2.threading传递参数

2.1args传递参数

单个参数,注意逗号
thread = threading.Thread(target=函数, args=(参数1,))
多个参数
thread = threading.Thread(target=函数, args=(参数1, 参数2))

2.2kwargs传递参数

通过key:value的形式传递的
thread = threading.Thread(target=函数, kwargs={"key1": "value1", "key2": value2})

2.3使用class封装线程函数

在调用start时,会先执行线程的init和run函数,我们重载init函数就可以传递参数。
同时重载run函数也可以自定义里面的功能

class test_thread(threading.Thread):   #继承线程def __init__(self, output):        #重载init函数,self是函数自己,output是参数super().__init__()             #调用父类的init函数self.output = outputdef run(self):print(self.output)....    #自定义

完整代码:

import threadingclass test_thread(threading.Thread):def __init__(self, output):super().__init__()self.output = outputdef run(self):print(self.output)def test():threads = []for i in range(10):thread = test_thread(f"这是第{i}个")threads.append(thread)for i in threads:i.start()for i in threads:i.join()if __name__ == '__main__':test()

3.ThreadPoolExecutor

如果任务数量较多,直接使用 threading.Thread 创建每个线程可能会导致性能问题。可以使用线程池来管理这些线程,这样可以提高性能并避免线程过多导致的资源浪费。

ThreadPoolExecutor是通过将任务不断提交到线程池来完成多线程的,我们首先定义最大线程数max_workers=?:

with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:

with可以确保在任务完成后自动进行清理工作(如释放资源),即使过程中发生了异常也会确保资源的正确释放。

with 语句的工作原理:

with 语句的核心是上下文管理器,它是一种实现了 enterexit 方法的对象。
enter:在 with 语句块开始时执行,通常用于资源的初始化。
exit:在 with 语句块结束时执行,无论是正常结束还是发生异常,通常用于清理资源。
在 with 语句块执行过程中,enter 方法会被调用并返回一个上下文对象,然后该对象会被用于执行 with 语句内部的代码。当 with 语句块执行完毕时,无论是正常结束还是抛出异常,exit 方法都会被调用,从而确保资源的释放。

加入线程需要我们submit(函数名,[参数])。

task = executor.submit()

future.result() :除了可以获取结果以外,还可以阻塞直到任务完成。当你调用 future.result() 时,它会等待任务执行完成并返回结果。如果任务抛出了异常,那么 future.result() 会重新抛出该异常。因此,我们需要在调用 future.result() 时使用 try-except 来捕获任务中的异常。
完整代码:

import concurrent.futures.threaddef test_fun():print("a")return 1def test():with concurrent.futures.thread.ThreadPoolExecutor(max_workers=3) as ss:mytasks = [ss.submit(test_fun) for i in range(10)]   #提交了10个任务for mytask in concurrent.futures.as_completed(mytasks):try:print(mytask.result())except Exception as e:print(e)if __name__ == '__main__':test()

不使用with:
你必须手动调用 shutdown() 来关闭线程池

executor = concurrent.futures.ThreadPoolExecutor(max_workers=3)
executor.shutdown()
http://www.dtcms.com/wzjs/111444.html

相关文章:

  • 沈阳做网站哪家便宜发布信息的免费平台有哪些
  • 采用模版建网站的缺点搜索引擎营销推广方案
  • 门户网站建设注意事项seo怎么优化
  • 上海 宝安网站建设 网络服务nba篮网最新消息
  • 木疙瘩h5制作个人博客seo
  • 葫芦岛城乡建设委员会网站杭州百度快速排名提升
  • 小码王编程网站如何做运营推广
  • 企业手机端网站模板下载seo网络优化是什么工作
  • 淘宝网站建设的策划书最新域名查询
  • 网站管理人员海外市场推广策略
  • 装修公司哪家更靠谱百度快照优化排名推广
  • 网站建设与管理试卷及答案网络营销的发展现状及趋势
  • 易网官方网站广告推广媒体
  • 响应式网站开发视频百度seo查询
  • 4.请简述网站建设流程的过程电子营销主要做什么
  • 网站建设的成本主要有哪几项爱站网收录
  • 做网站卖东西赚钱吗seo网站优化网站编辑招聘
  • 创新的盐城网站开发网站推广的主要方式
  • 外贸免费平台有哪些seo黑帽技术工具
  • 网站维护收费整合网络营销外包
  • 上海网架公司四川企业seo
  • 广西高端网站建设西安seo整站优化
  • 陕西建设网综合综合服务中心佛山网站优化
  • 中山建设安监站网站免费刷赞网站推广qq免费
  • 上虞网站建设公司关键词推广计划
  • 武进建设局网站进不去优化设计电子版
  • 舞蹈培训网站模板郴州网络推广公司排名
  • 网站利润百度推广代理商加盟
  • 免费制作主图的网站站长统计app下载
  • 西安网站建设xazxcy发布信息的免费平台