我想进行网络爬网,目前我正在读取具有12000个url的txt文件,我想在此过程中使用并发性,但是请求不起作用。
typealias escHandler = ( URLResponse?, Data? ) -> Void
func getRequest(url : URL, _ handler : @escaping escHandler){
let session = URLSession(
configuration: .default,
delegate: nil,
delegateQueue: nil)
var request = URLRequest(url:url)
request.httpMethod = "GET"
let task = session.dataTask(with: request){ (data,response,error) in
handler(response,data)
}
task.resume()
}
for sUrl in textFile.components(separatedBy: "\n"){
let url = URL(string: sUrl)!
getRequest(url: url){ response,data in
print("RESPONSE REACHED")
}
}
如果你有你的URLSessions正常工作,你需要去的就是创建独立的OperationQueue创建工作的每一个你想完成你的异步任务,将其添加到您的操作队列,并设置OperationQueue的maxConcurrentOperationCount来控制有多少你的任务都可以一次运行。Puesdo代码:
let operationQueue = OperationQueue()
operationQueue.qualityOfService = .utility
let exOperation = BlockOperation(block: {
//Your URLSessions go here.
})
exOperation.completionBlock = {
// A completionBlock if needed
}
operationQueue.addOperation(exOperation)
exOperation.start()
使用OperationQueue子类和Operation子类将为您提供用于处理多个线程的其他实用程序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句