宁夏交通厅建设局网站,各大网站主打文风,广州建筑装饰集团有限公司,做网站的市场怎么样Queue的模块里面提供了同步的、线程安全的队列类#xff0c;包括FIFO#xff08;先入后出#xff09;队列Queue、FIFO#xff08;后入先出#xff09;LifoQueue和优先队列PriorityQueue。#xff08;在上个文件创建了爬取文件#xff09;我们使用这个方法来获取#xf…Queue的模块里面提供了同步的、线程安全的队列类包括FIFO先入后出队列Queue、FIFO后入先出LifoQueue和优先队列PriorityQueue。在上个文件创建了爬取文件我们使用这个方法来获取代码如下
import threading
import requests
import time
import queue as Queuelink_list[]
with open(alexa.tex,r)as file:file_listfile.readlines()for eachone in file_list:linkeachone.split(\t)[1]linklink.replace(\n,)link_list.append(link)
starttime.time()
class myThread(threading.Thread):def __init__(self,name,q):threading.Thread.__init__(self)self.namenameself.qqdef run(self):print(Startingself.name)while True:try:crawler(self.name,self.q)except:breakprint(Exitingself.name)
def crawler(threadName,q):urlq.get(timeout2)try:rrequests.get(url,timeout20)print(q.qsize(),threadName,r.status_code,url)except Exception as e:print(q.qsize(),threadName,url,Error:,e)aii_list[Thread-1,Thread-2,Thread-3,Thread-4,Thread-5]workQueueQueue.Queue(1000)
thread[]#建立新的线程
for thName in aii_list:threadmyThread(thName,workQueue)thread.start()aii_list.append(thread)#填充列表
for i in link_list:workQueue.put(link_list)#结束线程
for t in thread:thread.join()endtime.time()
print(当前的总时间,end-start)
print(Exiting)
对象传入myThread中 thread myThreadtNameworkQueue 使用一个for循环来实现 for url in link_list: work.Queue.put(url) 多进程 使用multiprocess库有两种方法1.ProcessQueue的方法 2.PoolQueue的方法
我们因先了解计算机的cpu的核心
from multiprocessing import cpu_count
printcpu_count()) 然后代码示例
from multiprocessing import Process,Queue
import requests
import timelink_list[]
with open(alexa.tex,r)as file:file_listfile.readlines()for eachone in file_list:linkeachone.split(\t)[1]linklink.replace(\n,)link_list.append(link)
starttime.time()
class myProcess(Process):def __init__(self,q):Process.__init__(self)self.qqdef run(self):print(Startingself.name)while True:try:crawler(self.name,self.q)except:breakprint(Exitingself.name)
def crawler(q):urlq.get(timeout2)try:rrequests.get(url,timeout20)print(q.qsize(),r.status_code,url)except Exception as e:print(q.qsize(),url,Error:,e)if __name__ __main__:ProcessNames[prcess1,prcess2,prcess3]workQueueQueue(1000)for url in link_list:workQueue.put(url)for i in range(0,3):pmyProcess(workQueue)p.daemonTruep.start()p.join()endtime.time()print(当前的总时间,end-start)print(Exiting)
与多线程相比多进程相比多进程里面设置了(当父进程结束后子进程就会自动被终止 p.daemonTure 并且multprocessing自带了Queue