编程学习网 > PHP技术 > swoole > 提升格调神器,swoole多线程网络爬虫了解一下!
2021
08-10

提升格调神器,swoole多线程网络爬虫了解一下!


对于网络爬虫,相比大家已经并不陌生了,大家时常写的都是串行爬虫,已经烂大街了,平庸而缓慢的爬虫可能不足以满足聪明的你,所以,今天想给大家简单介绍一下更“高大上”的爬虫——多线程网络爬虫。

何为进程、线程、多线程?

进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

线程:不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统多个程序间并发执行的程度。

多线程:在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”。多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。

举个例子就是:我打开了QQ,此时,启动了一个进程(即QQ),给A发了一条语音,启动了该进程中的一个线程;然后又给B发了一个表情,此时我又启动了一个线程。这就是进程、线程、多线程的一个最简单的例子。

php中的多线程

PHP 默认并不支持多线程,要使用多线程需要安装 pthread 扩展,而要安装 pthread 扩展,必须使用 --enable-maintainer-zts 参数重新编译 PHP,这个参数是指定编译 PHP 时使用线程安全方式。而在swoole中,php可以借助其启动子进程的方式,实现php的多进程:


<?php 
echo '开始时间:'.date('H:i:s',time());
//进程数
$work_number=6;
 
//
$worker=[];
 
//模拟地址
$curl=[
	'https://blog.csdn.net/feiwutudou',
	'https://wiki.swoole.com/wiki/page/215.html',
	'http://fanyi.baidu.com/?aldtype=16047#en/zh/manager',
	'http://wanguo.net/Salecar/index.html',
	'http://o.ngking.com/themes/mskin/login/login.jsp',
	'https://blog.csdn.net/marksinoberg/article/details/77816991'
];
 
//单线程模式
// foreach ($curl as $v) {
// 	echo curldeta($v);
// }
 
//创建进程
for ($i=0; $i < $work_number; $i++) { 
	//创建多线程
	$pro=new swoole_process(function(swoole_process $work) use($i,$curl){
		//获取html文件
		$content=curldeta($curl[$i]);
		//写入管道
		$work->write($content.PHP_EOL);
	},true);
	$pro_id=$pro->start();
	$worker[$pro_id]=$pro;
}
//读取管道内容
foreach ($worker as $v) {
 	echo $v->read().PHP_EOL;
}
 
//模拟爬虫
function curldeta($curl_arr)
{	//file_get_contents
	echo $curl_arr.PHP_EOL;
	file_get_contents($curl_arr);
}
 
//进程回收
swoole_process::wait();
 
echo '结束时间:'.date('H:i:s',time());
 
 ?>
多进程执行结果



以上就是“提升格调神器,swoole多线程网络爬虫了解一下!”的详细内容,想要了解更多swoole教程欢迎关注编程学习网

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取