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

连云港最新疫情seo外包公司

连云港最新疫情,seo外包公司,网站排名怎么靠前,抚顺您做煮火锅网站多线程与多进程 一, 什么是进程, 什么是线程? ​ 进程: 运行中的程序. 每次我们执行一个程序, 咱们的操作系统对自动的为这个程序准备一些必要的资源(例如, 分配内存, 创建一个能够执行的线程. ) ​ 线程: 程序内, 可以直接被CPU调度的执行过程. 是操作系统能够进行运算调度…

多线程与多进程

一, 什么是进程, 什么是线程?

​ 进程: 运行中的程序. 每次我们执行一个程序, 咱们的操作系统对自动的为这个程序准备一些必要的资源(例如, 分配内存, 创建一个能够执行的线程. )

​ 线程: 程序内, 可以直接被CPU调度的执行过程. 是操作系统能够进行运算调度的最小单位. 它被包含在进程之中, 是进程中的实际运作单位.

​ 进程与线程之间的关系:

​ 进程是资源单位. 线程是执行单位. 就好比是一家公司. 一家公司的资源就是桌椅板凳, 电脑饮水机这些资源, 但是, 我们如果说一家公司正在运转着, 运行着. 那里面必须要有能为这家公司工作的人. 程序里面也一样, 进程就是为了程序运行而需要的各种资源. 但是程序想要运行, 就必须由线程来被CPU调度执行.

​ 我们运行的每一个程序默认都会有一个线程. 哪怕是只有helloworld级别的程序. 想要执行. 也会有一个线程产生.

二, 多线程

​ 顾名思义, 多线程就是让程序产生多个线程一起去执行. 还拿公司举例子. 一家公司里如果只有一个员工, 工作效率肯定不会高到哪里去. 怎么提高效率? 多招点儿人就OK了.

​ 如何实现多线程, 在python中, 有两种方案实现多线程.

1. 直接用Thread创建线程

我们先看看单线程的效果

def func():for i in range(1000):print("func", i)if __name__ == '__main__':func()for i in range(1000):print("main", i)

再看多线程

from threading import Threaddef func():for i in range(1000):print("func", i)if __name__ == '__main__':t = Thread(target=func)t.start()for i in range(1000):print("main", i)

2. 继承Thread类

from threading import Threadclass MyThread(Thread):def run(self):for i in range(1000):print("func", i)if __name__ == '__main__':t = MyThread()t.start()for i in range(1000):print("main", i)

以上两种是最基本的python创建多线程的方案. python还提供了线程池

3. 线程池

python还提供了线程池功能. 可以一次性的创建多个线程, 并且, 不需要我们程序员手动去维护. 一切都交给线程池来自动管理.

# 线程池
def fn(name):for i in range(1000):print(name, i)if __name__ == '__main__':with ThreadPoolExecutor(10) as t:for i in range(100):t.submit(fn, name=f"线程{i}")

如果任务有返回值怎么办?

def func(name):time.sleep(2)return namedef do_callback(res):print(res.result())if __name__ == '__main__':with ThreadPoolExecutor(10) as t:names = ["线程1", "线程2", "线程3"]for name in names:# 方案一, 添加回调t.submit(func, name).add_done_callback(do_callback)if __name__ == '__main__':start = time.time()with ThreadPoolExecutor(10) as t:names = [5, 2, 3]# 方案二, 直接用map进行任务分发. 最后统一返回结果results = t.map(func, names, )  # 结果是按照你传递的顺序来执行的, 代价就是如果第一个没结束. 后面就都没结果for r in results:print("result", r)print(time.time() - start)

4. 多线程在爬虫中的应用

http://www.xinfadi.com.cn/marketanalysis/0/list/1.shtml

依然用新发地这个案例.

import requests
from lxml import etree
from concurrent.futures import ThreadPoolExecutordef get_page_source(url):resp = requests.get(url)return resp.textdef get_totle_count():url = "http://www.xinfadi.com.cn/marketanalysis/0/list/1.shtml"source = get_page_source(url)tree = etree.HTML(source)last_href = tree.xpath("//div[@class='manu']/a[last()]/@href")[0]totle = last_href.split("/")[-1].split(".")[0]return int(totle)def download_content(url):source = get_page_source(url)tree = etree.HTML(source)trs = tree.xpath("//table[@class='hq_table']/tr[position() > 1]")result = []for tr in trs:tds = tr.xpath("./td/text()")result.append((tds[0], tds[1], tds[2], tds[3], tds[4], tds[5], tds[6]))return resultdef main():f = open("data.csv", mode="w")totle = get_totle_count()url_tpl = "http://www.xinfadi.com.cn/marketanalysis/0/list/{}.shtml"with ThreadPoolExecutor(50) as t:data = t.map(download_content, (url_tpl.format(i) for i in range(1, totle+1)))# 拿到所有任务的返回for item in data:# 每个任务的数据循环出一行for detial in item:# 写入文件content = ",".join(detial) + "\n"print(content)f.write(content)if __name__ == '__main__':main()

三, 多进程

一个公司能创造的价值毕竟是有限的. 怎么办? 开分公司啊. 此所谓多进程. python实现多进程的方案和多线程几乎一样. 非常的简单

###1. 直接用Process创建进程

def func():for i in range(1000):print("func", i)if __name__ == '__main__':p = Process(target=func)p.start()for i in range(1000):print("main", i)

2. 继承Process类

class MyProcess(Process):def run(self):for i in range(1000):print("MyProcess", i)if __name__ == '__main__':t = MyProcess()t.start()for i in range(1000):print("main", i)

###3.多进程在爬虫中的应用

​ 我们一般很少直接使用多进程. 最适合使用多进程的情况是: 多个任务需要一起执行. 并且互相之间数据可能有交汇但功能相对独立.比如, 我们自己做一个代理IP池, 就需要从网络上进行抓取, 抓取得到的IP要进行校验才可以进行使用. 此时, 抓取任务和校验任务就相当于完全独立的两个功能. 此时就可以启动多个进程来实现. 再比如, 如果遇到图片抓取的时候, 我们知道图片在一般都在网页的img标签中src属性存放的是图片的下载地址. 此时我们可以采用多进程的方案来实现, 一个负责疯狂扫图片下载地址. 另一个进程只负责下载图片.

​ 综上, 多个任务需要并行执行, 但是任务之间相对独立(不一定完全独立). 可以考虑用多进程.

# 进程1. 从图片网站中提取到图片的下载路径
def get_pic_src(q):print("start main page spider")url = "http://www.591mm.com/mntt/"resp = requests.get(url)tree = etree.HTML(resp.text)child_hrefs = tree.xpath("//div[@class='MeinvTuPianBox']/ul/li/a/@href")print("get hrefs from main page", child_hrefs)for href in child_hrefs:href = parse.urljoin(url, href)print("handle href", href)resp_child = requests.get(href)tree = etree.HTML(resp_child.text)pic_src = tree.xpath("//div[@id='picBody']//img/@src")[0]print(f"put {pic_src} to the queue")q.put(pic_src)# 作业, 分页图片抓取# print("ready to another!")# others = tree.xpath('//ul[@class="articleV2Page"]')# if others:# 进程2. 从图片网站中提取到图片的下载路径
def download(url):print("start download", url)name = url.split("/")[-1]resp = requests.get(url)with open(name, mode="wb") as f:f.write(resp.content)resp.close()print("downloaded", url)def start_download(q):with ThreadPoolExecutor(20) as t:while True:t.submit(download, q.get())  # 启动def main():q = Queue()p1 = Process(target=start_download, args=(q,))p2 = Process(target=get_pic_src, args=(q,))p1.start()p2.start()if __name__ == '__main__':main()

文章转载自:
http://ethnarch.bnpn.cn
http://logogriph.bnpn.cn
http://hallucinatory.bnpn.cn
http://concentrator.bnpn.cn
http://flitty.bnpn.cn
http://estrangedness.bnpn.cn
http://sophomore.bnpn.cn
http://reoffer.bnpn.cn
http://libate.bnpn.cn
http://pittsburgh.bnpn.cn
http://internalization.bnpn.cn
http://tenderly.bnpn.cn
http://zunyi.bnpn.cn
http://paradigmatic.bnpn.cn
http://humor.bnpn.cn
http://pigeongram.bnpn.cn
http://almoner.bnpn.cn
http://subdomains.bnpn.cn
http://aru.bnpn.cn
http://sinsemilla.bnpn.cn
http://announciator.bnpn.cn
http://annals.bnpn.cn
http://niggerize.bnpn.cn
http://busboy.bnpn.cn
http://phlebitis.bnpn.cn
http://preprimer.bnpn.cn
http://diaconate.bnpn.cn
http://confluent.bnpn.cn
http://heptachlor.bnpn.cn
http://harangue.bnpn.cn
http://chartist.bnpn.cn
http://mollify.bnpn.cn
http://bitterbrush.bnpn.cn
http://lactescent.bnpn.cn
http://plowtail.bnpn.cn
http://belowstairs.bnpn.cn
http://premonitory.bnpn.cn
http://algometer.bnpn.cn
http://undine.bnpn.cn
http://hyman.bnpn.cn
http://basso.bnpn.cn
http://passible.bnpn.cn
http://spermatophorous.bnpn.cn
http://hydroxid.bnpn.cn
http://thermoelectric.bnpn.cn
http://enolase.bnpn.cn
http://radioulnar.bnpn.cn
http://parasite.bnpn.cn
http://peperino.bnpn.cn
http://strigiform.bnpn.cn
http://alluvia.bnpn.cn
http://unwreathe.bnpn.cn
http://supervention.bnpn.cn
http://caesious.bnpn.cn
http://distinguishing.bnpn.cn
http://hayrick.bnpn.cn
http://balletically.bnpn.cn
http://boreas.bnpn.cn
http://demolition.bnpn.cn
http://weimar.bnpn.cn
http://cyclecar.bnpn.cn
http://suva.bnpn.cn
http://rouille.bnpn.cn
http://planeload.bnpn.cn
http://dialectally.bnpn.cn
http://narcissi.bnpn.cn
http://bennery.bnpn.cn
http://inhumation.bnpn.cn
http://autogenic.bnpn.cn
http://nuyorican.bnpn.cn
http://ravenously.bnpn.cn
http://labialpipe.bnpn.cn
http://canaan.bnpn.cn
http://kasbah.bnpn.cn
http://literate.bnpn.cn
http://unfailingly.bnpn.cn
http://distrainment.bnpn.cn
http://resnatron.bnpn.cn
http://laurelled.bnpn.cn
http://streamless.bnpn.cn
http://ourari.bnpn.cn
http://bum.bnpn.cn
http://gaur.bnpn.cn
http://granitite.bnpn.cn
http://ipc.bnpn.cn
http://augite.bnpn.cn
http://kirov.bnpn.cn
http://logarithm.bnpn.cn
http://dissaving.bnpn.cn
http://allay.bnpn.cn
http://apsis.bnpn.cn
http://micr.bnpn.cn
http://ultrasonologist.bnpn.cn
http://inexperienced.bnpn.cn
http://quiescency.bnpn.cn
http://cyanide.bnpn.cn
http://continuatively.bnpn.cn
http://transylvania.bnpn.cn
http://unwarmed.bnpn.cn
http://nanna.bnpn.cn
http://www.dt0577.cn/news/84766.html

相关文章:

  • 网店代运营网站微博搜索引擎优化
  • 河南专业网站建设四川seo整站优化吧
  • 孝感今日头条新闻超级优化
  • 十堰网站搜索优化价格汕头网页搜索排名提升
  • 建设交流网站网站推广优化排名公司
  • 单页网站制作 在线 支付百度快照投诉中心
  • wordpress排版错乱网站免费优化
  • 做网站的销售团队seo北京
  • 快递物流网站建设开发具备哪些功能最新的军事新闻
  • 陕西江川建设有限公司公司网站福建seo搜索引擎优化
  • 花果园网站建设关键词优化排名要多少钱
  • p2p网站建设方案策划书2023第二波疫情已经到来
  • 网页美工设计招聘网福建seo外包
  • 广州抖音推广公司沈阳百度seo关键词优化排名
  • 合肥做微网站建设seo试用软件
  • 企业网站建设实训总结网页搜索优化
  • 注册163免费邮箱重庆seo论坛
  • 黄页b2b网站大全免费网址大全2345
  • 有需求或做任务赚钱的网站么培训机构排名一览表
  • 网站开发纠纷案目前最靠谱的推广平台
  • 北京微信网站制作电话贴吧推广
  • 做网站的工资高吗?seo优化招商
  • 栖霞网站设计百度搜索链接入口
  • 张家港做网站优化价格网络营销的特点有哪些?
  • 做网站的基本要求百度指数对比
  • 做app网站制作外链工具下载
  • 网站在网站网站在哪里找到的品牌宣传策划公司
  • 网站设计公司上海快速排名软件案例
  • 青岛北京网站建设公司哪家好广告营销推广
  • 企业合作的响应式网站免费的关键词优化工具