是否可以同时运行3行代码?

时间:2012-02-17 17:53:26

标签: php multithreading process

此代码:

$ip1 = `/usr/bin/dig $host1`;
$ip2 = `/usr/bin/dig $host2`;
$ip3 = `/usr/bin/dig $host3`;

一个接一个地跑。问题是挖掘响应速度是随机的。它可能很快,也可能超过10秒。我的问题是如何在同一页面上同时运行这3行代码?

我愿意接受其他方法,例如在3个不同的页面中运行。我有array_chunk($input_array, 3)$input_array是mysql查询的结果,其中包含我可以在上面的3个不同查找中运行的值。我将查询分为3部分。现在问题是我不知道如何将3个部分发送到3个不同的页面并运行挖掘查找。我只知道如何用表格来做。这就是我向您展示上述代码的原因。我现在空白。

请帮帮我。提前谢谢。

5 个答案:

答案 0 :(得分:1)

这不是多线程,而且,您尝试在域名服务器上运行3次查找,并且根据每台主机,NS服务器或主机文件的缓存时间,速度可能会有所不同。

但是,如果我理解,你可以使用shell批处理实现你想要的东西:

$ dig uol.com.br; dig aol.com; dig nytimes.com

甚至更好,因为挖掘支持它:

$ dig uol.com.br aol.com nytimes.com

这将只使用一个命令行同时进行3次查找,与';';

连接

要实现此功能,请使用数组:

$hosts[] = 'aol.com';
$hosts[] = 'uol.com.br';
$hosts[] = 'nytimes.com';

passthru('dig '.implode(' ',$hosts));

希望有所帮助

答案 1 :(得分:1)

有两种方法。

  1. 写一个小的php脚本,它只返回一个ip并在数据库中更新。使用exec()运行这些进程。在主要的PHP程序中等待所有进程状态将在数据库中“完成”。从db获取所有结果。注意:使用nohup参数在后台运行进程。

  2. 使用php pcntl实现目标。

答案 2 :(得分:0)

尝试在评论中提供的想法从第二位开始:

Does PHP have threading?

据我所知,PHP没有多线程,但这是一种将每个作为后台进程运行的方法。

答案 3 :(得分:0)

好吧,如果它在一个页面中运行,你也可以尝试使用Ajax,使用一些javascript库可以很容易地完成它

这里是jquery

中ajax用法的文档

http://api.jquery.com/category/ajax

答案 4 :(得分:0)

只要使用exec(),就可以在后台运行shell命令,并将第三个参数指向文件或其他输出流,否则PHP会在运行下一行代码之前等待命令完成运行

http://php.net/manual/en/function.exec.php