<?php
declare(ticks = 1);
$running = 1;
//信号处理函数
function sig_handler($signo)
{
switch ($signo) {
case SIGINT:
finish();
break;
default:
break;
}
}
pcntl_signal(SIGINT, "sig_handler");
class test extends \Thread {
public $url;
public $result;
public function __construct($url) {
$this->url = $url;
}
public function run() {
if ($this->url) {
$this->result = model_http_curl_get($this->url);
}
}
}
function model_http_curl_get($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 5);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)');
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
for ($i = 0; $i < 500; $i++) {
$urls[] = 'http://www.baidu.com/s?wd='. rand(10000, 20000);
}
$pool = array();
for ($i=1;$i<=5;$i++) {
$key = uniqid();
$url = array_shift($urls);
$pool[$key] = new test($url);
$pool[$key]->start();
echo "启动线程$key\n";
}
while ($urls && $running) {
foreach ($pool as $key=>$worker) {
if(! $worker->isRunning()){
//unset($pool[$key]);
echo "线程".$key."已结束\n";
$url = array_shift($urls);
$pool[$key] = new test($url);
$pool[$key]->start();
echo "启动线程$key\n";
}
}
usleep(1000);
}
function finish() {
global $running;
global $pool;
$running = 0;
echo "接收到信号,等待运行中线程结束\n";
foreach ($pool as $key=>$worker) {
if ($pool[$key]->join()) {
var_dump($pool[$key]->result);
}
}
}
PHP多线程pthreads使用例子
时间: 2024-09-08 19:58:25
PHP多线程pthreads使用例子的相关文章
python中多线程的一个例子总是报错大家帮忙看看
问题描述 python中多线程的一个例子总是报错大家帮忙看看 解决方案 http://bbs.csdn.net/topics/390614709 解决方案二: ...找到原因了是t2里的args函数名没写对.............,还是谢谢各位了
php与python 线程池多线程爬虫的例子
php例子 <?php class Connect extends Worker //worker模式 { public function __construct() { } public function getConnection() { if (!self::$ch) { self::$ch = curl_init(); curl_setopt(self::$ch, CURLOPT_TIMEOUT, 2); curl_setopt(self::$ch, CURLOPT_R
PHP多线程(pthreads)与自动加载BUG问题
近日用PHP处理约7k条网络数据,现有网络情况下,耗时通常一秒一条,跑完整个程序大约近两个小时. 由于跑一次数据的时间太长,因此计划通过多个线程实现并行处理,我们可以通过pthreads扩展来实现真正的多线程,而不是常见的fsockopen来"模拟".pthreads的官网介绍在这里:http://pthreads.org/ 需要注意的是,如果尝试用数组在线程间交换数据,你会失望的,因为php的数组本身不是线程安全的,正确的做法是继承Stackable类.一个简单的demo如下所示:
python多线程编程简单例子
我喜欢用代码来理解程序,而不是单单的教程 类 ThreadClass 继承自 threading.Thread,也正因为如此,您需要定义一个 run 方法,以此执行您在该线程中要运行的代码.在这个 run 方法中唯一要注意的是,self.getName()是一个用于确定该线程名称的方法. 代码如下 复制代码 #! /usr/bin/env python #coding=utf-8 import threading import datetime import time import rando
PHP多线程(pthreads)参数传递学习笔记
测试环境 OS: win7 64 PHP: 5.4.25 ts pthreads: 0.1.0 1.性能问题 2.PDO等某些类型不能serialize所以就不能传递到线程. 这两个问题是能通过其他凡是解决的,解决方法仁者见仁智者见智. 另外,可以通过传递匿名函数到线程中,但是有个bug,匿名函数不能赋值给线程中的属性,导致传递的匿名函数只能在线程的构造方法中才能使用(call_user_fun*系列函数调用). Thread属性定义一定要注意必须在构造方法中初始化,否则必定为null.__co
php curl_multi 多线程查询的例子
PHP自身没有多线程的,可以借助扩展实现.但是curl_multi* 函数实现了多线程访问网站数据的功能. 步骤总结如下: 第一步:调用curl_multi_init 第二步:循环调用curl_multi_add_handle 这一步需要注意的是,curl_multi_add_handle的第二个参数是由curl_init而来的子handle. 第三步:持续调用curl_multi_exec 第四步:根据需要循环调用curl_multi_getcontent获取结果 第五步:调用curl_mul
PHP使用CURL_MULTI实现多线程采集的例子_php实例
这两天有一客户定制了一个免登录发布模块,因为在模块中需要涉及到很多图片下载的问题,考虑到性能问题,所以特别写了一个CURL_MULTI远程采集网页的函数,以方便以后使用,估计以后都不会使用原来的单线程curl函数去foreach了,其性能对比很明显的.同样获取我的博客的十个不同网页,curl_multi:4.5246081352234,file_get_contents:33.001797914505,将近8倍的效率,可想而知,如果在附件更多的情况下,性能差异就越明显了,希望对您有所帮助! 复制
php pthreads多线程的安装与使用_php实例
安装Pthreads 基本上需要重新编译PHP,加上 --enable-maintainer-zts 参数,但是用这个文档很少:bug会很多很有很多意想不到的问题,生成环境上只能呵呵了,所以这个东西玩玩就算了,真正多线程还是用Python.C等等 一.安装 这里使用的是 php-7.0.2 ./configure \ --prefix=/usr/local/php7 \ --with-config-file-path=/etc \ --with-config-file-scan-dir=/etc
PHP 多线程扩展(正儿八经的线程)pthreads安装
环境CentOS 6.3 64bit,php 5.4.5 pthreads需要线程安全环境, 下载php的安装包,解压: tar zxvf php-5.4.5.tar.gz//名字是不是这个我不确定,自己去下载 安装: ./configure --enable-zts --prefix=/usr/local/php-zts make make install 结果就把线程安装版的php安装到了/usr/local/php-zts,目前我不了解开启线程安全到底会