【发布时间】:2015-04-09 14:38:22
【问题描述】:
帮助我了解 Pool::collect 的具体工作原理。
Pool::collect — 收集对已完成任务的引用
public void Pool::collect ( Callable $collector )
我的假设是:Pool::collect 注册了一个函数,该函数将在每个 \Threaded $task 完成后调用。所以,我做到了:
<?php
$pool = new Pool(4);
$pool->collect($collector);
$pool->submit(new Task);
没用。但以下是:
<?php
$pool = new Pool(4);
$pool->submit(new Task);
$pool->collect($collector);
所以,我猜Pool::collect 的作用是:将$collector 附加到之前提交的每个\Threaded $task。
现在,究竟什么时候调用了$collector?我假设在Threaded::run() 完成后调用。又错了。
<?php
class Task extends Threaded {
public function run () { echo "Task complete\n"; }
}
$collector = function (\Task $task) {
echo "Collect task\n";
return true;
};
$pool = new Pool(4);
$pool->submit(new Task);
$pool->collect($collector);
$pool->shutdown();
输出:
Collect task
Task complete
$collector 在Threaded::run() 完成之前被调用。
文档没有说太多。事件不是说$collector 必须返回一个布尔值。 I didn't know that.
我试图在每个 $task 完成后使用 Pool::collect 作为一种回调。我想我走错了路。
编辑 1.What about this attempt?
【问题讨论】:
标签: php callback pthreads threadpool