经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
php Pthread 多线程 Worker
来源:cnblogs  作者:nike_9527  时间:2018/10/8 9:13:54  对本文有异议
  1. 1 <?php
  2. 2 //PHP 高级编程之多线程 http://www.netkiller.cn/journal/thread.php.html#idp57489856
  3. 3 //worker 是一个具有持久化上下文的线程对象,通常用来在多个线程中使用。
  4. 4 //worker 对象start后,会直接运行run()方法,执行完毕之后,线程也不会die掉
  5. 5 //SQLQuery 是任务类
  6. 6 class SQLQuery extends Thread
  7. 7 {
  8. 8 public $worker;
  9. 9 public $sql;
  10. 10 public function __construct($sql)
  11. 11 {
  12. 12 $this->sql = $sql;
  13. 13 }
  14. 14
  15. 15 public function run()
  16. 16 {
  17. 17 $dbh = $this->worker->getConnection();
  18. 18 $row = $dbh->prepare($this->sql,array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
  19. 19 $row->execute();
  20. 20 while($member = $row->fetch(PDO::FETCH_ASSOC))
  21. 21 {
  22. 22 // print_r($member);
  23. 23 }
  24. 24 }
  25. 25 }
  26. 26 //worker 执行任务
  27. 27 class ExampleWorker extends Worker {
  28. 28 public static $dbh;
  29. 29 public function __construct($name) {
  30. 30 }
  31. 31
  32. 32 /*
  33. 33 * The run method should just prepare the environment for the work that is coming ...
  34. 34 */
  35. 35 public function run(){
  36. 36 self::$dbh = new PDO('mysql:dbname=mix;host=192.168.33.11','root','');
  37. 37 }
  38. 38 public function getConnection(){
  39. 39 return self::$dbh;
  40. 40 }
  41. 41 }
  42. 42
  43. 43 $worker = new ExampleWorker("My Worker Thread");
  44. 44
  45. 45 for ($i = 0; $i < 5; ++$i) {
  46. 46 $worker->stack(new SQLQuery('select * from stores limit '.$i)); // 将要执行的任务入栈
  47. 47 }
  48. 48
  49. 49 echo "{$worker->getStacked()} tasks\n"; //获取栈中剩余的任务数量
  50. 50 $worker->start(); //执行完Worker中的对象后
  51. 51 $worker->shutdown(); //关闭Worker。 跟队列很像
  52. 52
  53. 53 /*
  54. 54 这里会报错
  55. 55 Uncaught RuntimeException: the creator of ExampleWorker already started
  56. 56 没有线程die掉
  57. 57 while(true)
  58. 58 {
  59. 59 sleep(5);
  60. 60 $worker->start();
  61. 61 $worker->shutdown();
  62. 62 }
  63. 63 */
  64. 64

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号