swoole之创建子进程
一、代码
<?php /**
* 进程就是正在运行的程序的一个实例
* 比如,在某个终端中执行一个PHP脚本,可以认为就是开启了一个进程,会有对应的进程id(pid)
*
* swoole进程与进程之间是通过管道通信
*/ /**
* 执行process.php 创建子进程$pid 子进程创建http_server
*
* php(11440,主进程)───php(11441,子进程)─┬─php(11442,manager进程)─┬─php(11444,worker进程)
* │ ├─php(11445)
* │ ├─php(11446)
* │ └─php(11447)
* └─{php}(11443)
*/ $process = new swoole_process(function (swoole_process $worker) {
// 执行 php http.php 开启http服务器
$worker->exec("/usr/local/php71/bin/php", [__DIR__.'/../server/http.php']);
}, true); $pid = $process->start();
echo $pid.PHP_EOL; swoole_process::wait(); /**
* 模拟爬取多个网站的数据场景
*/
$urls = [
'http://www.helloweba.net/php/576.html',
'http://www.helloweba.net/php/580.html',
'http://www.helloweba.net/php/581.html'
]; $workers = []; echo 'process start: '.date('Y-m-d H:i:s').PHP_EOL; for ($i=0; $i<count($urls); $i++) {
$url = $urls[$i];
$process = new swoole_process(function (swoole_process $worker) use ($url) {
$content = curlData($url);
// echo $content.PHP_EOL;
$worker->write($content);
}, true);
$pid = $process->start();
$workers[$pid] = $process;
} foreach ($workers as $process) {
echo $process->read();
} /**
* 简化模拟请求
* @param [type] $url
* @return void
*/
function curlData($url)
{
sleep(1);
return "get {$url} content success".PHP_EOL;
} echo 'process end: '.date('Y-m-d H:i:s').PHP_EOL; /*
输出数据,用时1秒(多进程执行)而不是3秒:
process start: 2019-05-05 18:02:42
get http://www.helloweba.net/php/576.html content success
get http://www.helloweba.net/php/580.html content success
get http://www.helloweba.net/php/581.html content success
process end: 2019-05-05 18:02:43
*/
swoole之创建子进程的更多相关文章
- fork()创建子进程
fork()系统调用是Unix下以自身进程创建子进程的系统调用,一次调用,两次返回,如果返回是0,则是子进程,如果返回值>0,则是父进程(返回值是子进程的pid) 在fork()的调用处,整个父 ...
- Nginx学习笔记(七) 创建子进程
Nginx创建子进程 ngx_start_worker_processes位于Nginx_process_cycle.c中,主要的工作是创建子进程. 在Nginx中,master进程和worker进程 ...
- [转载]Python模块学习 ---- subprocess 创建子进程
[转自]http://blog.sciencenet.cn/blog-600900-499638.html 最近,我们老大要我写一个守护者程序,对服务器进程进行守护.如果服务器不幸挂掉了,守护者能即时 ...
- windows、linux创建子进程
在windows下创建子进程较常用到的API就是CreateProcess,可以通过以下的方式启动一个新进程: STARTUPINFO si = {0}; PROCES ...
- Linux 创建子进程执行任务
Linux 操作系统紧紧依赖进程创建来满足用户的需求.例如,只要用户输入一条命令,shell 进程就创建一个新进程,新进程运行 shell 的另一个拷贝并执行用户输入的命令.Linux 系统中通过 f ...
- exec族函数详解及循环创建子进程
前言:之前也知道exec族函数,但没有完全掌握,昨天又重新学习了一遍,基本完全掌握了,还有一些父子进程和循环创建子进程的问题,还要介绍一下环境变量,今天分享一下. 一.环境变量 先介绍下环境的概念和特 ...
- 利用fork创建子进程
创建如图的进程: #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<wait. ...
- JAVA创建子进程并处理waitFor() 阻塞问题
虽然很想休息,但是想想还是要把今天学的东西记下来,不然以后再用还是新知识. 新建一个线程类读取子进程的汇报信息和错误信息,避免阻塞 class StreamGobbler extends Thread ...
- 第二十篇:不为客户连接创建子进程的并发回射服务器(poll实现)
前言 在上文中,我使用select函数实现了不为客户连接创建子进程的并发回射服务器( 点此进入 ).但其中有个细节确实有点麻烦,那就是还得设置一个client数组用来标记select监听描述符集中被设 ...
随机推荐
- Servlet返回的数据js解析问题
Servlet返回的数据js解析问题 方式1:Json 接收函数:ajax.responseText后面没括号 其实在之前所说的ajax中还遗留了一些问题就是,Servlet返回给js的数据是如何被j ...
- SpringBoot下配置Druid
什么是Druid:Druid是阿里发开的一套基于database的监控平台,相对于其他监控来说对于中文的支持更亲民.. 前言:最近这段时间发现项目整体运行响应速度较慢,打算对系统进行深层次的优化(尤其 ...
- 1.ORM介绍,基本配置及通过ORM框架创建表
1.介绍 ORM全拼Object-Relation Mapping(对象-关系映射) 作用:主要实现模型对象到关系数据库数据的映射 通过ORM框架作为一个中间者或者是一个桥梁,开发者通过定义模型类,属 ...
- twisted 模拟scrapy调度循环
"""模拟scrapy调度循环 """from ori_test import pr_typeimport loggingimport ti ...
- ubuntu13.10安装增强功能
步骤: 1>cd /mnt 2> ./VBoxLinuxAdditions.run 3>设置共享文件夹share 4>访问共享文件夹cd /media/sf_share not ...
- centos上正式环境邮件发送失败问题
用celery异步发送邮件的时候遇到一个问题: 能接收到任务,但是就是执行不了, 也不报错 发现可能是settIngs.py里设置的端口有问题, 现在设置的端口是25, 改成465, 并且把ssl打开 ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 表格:让表格更加紧凑
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- C12Test5 record
- LeetCode困难题(一)
题目一: 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序. 示例 ...
- Codeforces Round #586 (Div. 1 + Div. 2)E(拓扑排序,思维)
#include<bits/stdc++.h>using namespace std;int n,m,s; vector<int>edge[200007];queue<i ...