php使用yield进行大数据量处理

php使用yield进行大数据量处理

当我们需要使用php来处理大数据量时,例如循环数据库的所有记录,这个记录可能会很大,例如100万行,那么通过传统的办法就行不通了。首先通过web访问,php有超时时间,默认是30秒。那么就只能通过php cli的方式来执行,这样就没有超时时间了,但由于数据量太大,php循环时需要将数据全部载入内存中执行,由于数据量太大,php会报Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 4096 bytes)的错误。php默认的内存限制为128M,虽然可以通过修改php.ini中memory_limit的选项的值来提高内存限制,但始终不是最优的解决办法。PHP通过生成器函数可以极大节省内存开销。

生成器函数

生成器函数看起来像普通函数——不同的是普通函数返回一个值,而生成器可以 yield 生成多个想要的值。 任何包含 yield 的函数都是一个生成器函数。
当一个生成器被调用的时候,它返回一个可以被遍历的对象.当你遍历这个对象的时候(例如通过一个foreach循环),PHP 将会在每次需要值的时候调用对象的遍历方法,并在产生一个值之后保存生成器的状态,这样它就可以在需要产生下一个值的时候恢复调用状态。

yield...

点击查看剩余70%

{{collectdata}}

网友评论