请问大家是怎么处理 PHP 多进程的?

2017-09-13 19:51:31 +08:00
 ericgui
最近在写爬虫,然后页面必须要 用到 chromedriver 和 selenium,速度慢,效率低
所以想用多进程,看到一个库,symfony/process
看了半天,也没明白怎么搞多进程

能否请教一下,大家是怎么做 多 进程的?

如果有其他办法提高爬虫效率 ,也请不吝赐教,谢谢
4186 次点击
所在节点    PHP
19 条回复
R18
2017-09-13 19:59:51 +08:00
orderc
2017-09-13 20:04:06 +08:00
pcntl_fork
ericgui
2017-09-13 20:27:46 +08:00
@R18 这个 pcntl 有 wrapper 吗?
ericgui
2017-09-13 20:28:31 +08:00
@R18 哦,找到了一个,谢谢
gouchaoer
2017-09-13 20:29:40 +08:00
https://www.v2ex.com/t/325540#reply26

我就是用的这个库,它底层包装的 proc_open 函数,pcntl 是 fork 机制不太适合 lz 的情况
ericgui
2017-09-13 20:37:06 +08:00
@gouchaoer 我给你的知乎文章留言了,我就是按照你的博客,挨个研究你在博客上推荐的几个库,现在研究到这个 symfony/process,看了好几天了,没看到 doc 里写多进程的内容,所以才来 v 站提问,没想到偶遇高人,不甚荣幸!
ericgui
2017-09-13 20:39:02 +08:00
@gouchaoer 不过我用 Facebook/Webdriver 里的示例代码没运行成功,后来用的是 chromedriver,但效率太低。能加个 QQ 么?
vex2
2017-09-13 20:42:44 +08:00
symfony/process 也是 pcntl_fork 实现的
gouchaoer
2017-09-13 21:55:56 +08:00
@ericgui 你给我打钱就行

@vex2 给你推荐一个 php 扩展: https://github.com/jilieryuyi/wing-process
彻底兼容 win/Linux
t6attack
2017-09-13 22:09:54 +08:00
悲催的说,当初研究这个时,那些扩展一个也没搞明白。
最后自己造了土轮子。用 popen 执行代码,当作子进程。用读写文件的方式交流运行情况、并施加控制。
ericgui
2017-09-13 22:52:23 +08:00
@gouchaoer 没问题。真心求教!我给你的博客 下面 的 email 写个邮件 ,然后加个 QQ ?
gouchaoer
2017-09-13 23:43:09 +08:00
@ericgui 有问题不知道在 github 在社区问为啥一定要 QQ,这很不合适的
gouchaoer
2017-09-13 23:48:43 +08:00
```
$process = new \Symfony\Component\Process\Process ( "php test.php" );
$process->disableOutput ();
$process->start ();
```
这就完了嘛,你只是启动一个进程而已
Fishdrowned
2017-09-13 23:56:25 +08:00
我用 swoole process 管理进程,要安装 swoole 扩展,如果自己有主机不是问题
iyaozhen
2017-09-14 00:04:16 +08:00
@Fishdrowned +1 这个更好用
ericgui
2017-09-14 11:09:24 +08:00
@gouchaoer 我在队列里有一万多个 URL,都是等待要爬取的,我想同时启动多个 worker 爬取,而不是一个个从队列里取出 url 来爬,所以想用多进程。不知道怎么处理,所以想请教。
gouchaoer
2017-09-14 12:25:33 +08:00
@ericgui 把 url 放进 redis 的 list 中,启动多个 worker 去 list 取就完了,别去用进程间通信因为太难了,进程间交流通过 redis 最简单
fuxkcsdn
2017-09-14 13:17:40 +08:00
用 pcntl_fork 加 daemon 就可以了
master 获取任务,通过 ipc 分发任务给 child (可控)
或者各个 child 各自负责获取任务也行
ericgui
2017-09-14 13:40:05 +08:00
@gouchaoer 想加您 QQ 请教的目的,就是想问一下怎么启动多个 worker,完全没概念。即便您比较忙,不能多聊,给几个关键词我去查查也可以的。所以。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/390472

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX