一、代码

<?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之创建子进程的更多相关文章

  1. fork()创建子进程

    fork()系统调用是Unix下以自身进程创建子进程的系统调用,一次调用,两次返回,如果返回是0,则是子进程,如果返回值>0,则是父进程(返回值是子进程的pid) 在fork()的调用处,整个父 ...

  2. Nginx学习笔记(七) 创建子进程

    Nginx创建子进程 ngx_start_worker_processes位于Nginx_process_cycle.c中,主要的工作是创建子进程. 在Nginx中,master进程和worker进程 ...

  3. [转载]Python模块学习 ---- subprocess 创建子进程

    [转自]http://blog.sciencenet.cn/blog-600900-499638.html 最近,我们老大要我写一个守护者程序,对服务器进程进行守护.如果服务器不幸挂掉了,守护者能即时 ...

  4. windows、linux创建子进程

    在windows下创建子进程较常用到的API就是CreateProcess,可以通过以下的方式启动一个新进程: STARTUPINFO si = {0};                 PROCES ...

  5. Linux 创建子进程执行任务

    Linux 操作系统紧紧依赖进程创建来满足用户的需求.例如,只要用户输入一条命令,shell 进程就创建一个新进程,新进程运行 shell 的另一个拷贝并执行用户输入的命令.Linux 系统中通过 f ...

  6. exec族函数详解及循环创建子进程

    前言:之前也知道exec族函数,但没有完全掌握,昨天又重新学习了一遍,基本完全掌握了,还有一些父子进程和循环创建子进程的问题,还要介绍一下环境变量,今天分享一下. 一.环境变量 先介绍下环境的概念和特 ...

  7. 利用fork创建子进程

    创建如图的进程: #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<wait. ...

  8. JAVA创建子进程并处理waitFor() 阻塞问题

    虽然很想休息,但是想想还是要把今天学的东西记下来,不然以后再用还是新知识. 新建一个线程类读取子进程的汇报信息和错误信息,避免阻塞 class StreamGobbler extends Thread ...

  9. 第二十篇:不为客户连接创建子进程的并发回射服务器(poll实现)

    前言 在上文中,我使用select函数实现了不为客户连接创建子进程的并发回射服务器( 点此进入 ).但其中有个细节确实有点麻烦,那就是还得设置一个client数组用来标记select监听描述符集中被设 ...

随机推荐

  1. 【JS 日期】获取当前日期时间

    获取当前日期时间 <!DOCTYPE html> <html> <head></head> <body> <script> wi ...

  2. Redis数据库与python的交互

    1.安装redis模块:pip install redis 2.安装好以后主要使用redis模块中的StrictRedis对象,用于连接redis服务器 3.代码如下: from redis impo ...

  3. elk安装2.0版本,自己总结,比较细致 es单机的安装

    用root用户会报错,版本6之前还是可以用root用户启动的,针对es的保护,数据的一些问题,6之后就不允许了. 启动成功 下面验证一下  可以直接用浏览器访问,接受http访问 配置,因为没有暴露端 ...

  4. PAT T1014 Circles of Friends

    大水题,dfs判连通块的数量,bfs每个点找朋友圈的最大直径~ #include<bits/stdc++.h> using namespace std; ; vector<int&g ...

  5. 关于ubuntu挂载ntfs无法进行读写的解决方法

    查看挂载信息 df -h 参看要挂载磁盘UUID sudo blkid 编辑/etc/fstab文件: sudo vim /etc/fstab 在最后一行添加如下一行信息: UUID=A248CF46 ...

  6. Maven笔记一

    简介:什么是maven Maven是一个跨平台的项目管理工具,主要用于基于java平台的项目构建,依赖管理. 如图为项目构建的过程. 解决的项目的问题: 1.  如果有好几个项目,这好几个项目中,需要 ...

  7. 13 JavaScript Array对象&Boolean对象&Math对象&RegExp对象

    万物皆对象,数组是对象,数组可以存储元素,函数,数组等对象 创建数组的三个方式: 常规方式:var myCars = new Array(); 简介方式:var myCars = new Arrray ...

  8. SPI接口的FLASH

    SPI flash W25Qxx: W25Q系列的spiflash.每页(Page)256B,每16个page为一个sector(扇区=4KB),每16个扇区为一个block(块=64KB) W25Q ...

  9. Curl常用函数介绍

    一.LibCurl基本编程框架 在基于LibCurl的程序里,主要采用callback function (回调函数)的形式完成传输任务,用户在启动传输前设置好各类参数和回调函数,当满足条件时libc ...

  10. Uart学习笔记

    分享一个蛮好的链接:https://blog.csdn.net/wordwarwordwar/article/details/73662379 今天在看的资料是S家的DW_apb_uart的官方文档. ...