线程池 - 想用php发邮件然后记录发送结果,目前用的redis,用一个脚本执行发送和记录操作,很慢,有什么更好的方法吗

WBOY
Freigeben: 2016-09-27 14:18:11
Original
964 Leute haben es durchsucht

目前是用的一个php脚本,执行请求外部接口发邮件,然后等邮件返回,得到处理结果,然后往自己的数据库记录发送结果。。
一个小时大概能处理2w条,太慢了。。

老板说用线程池来做,我现在又是一脸懵逼。。不太懂具体的做法,有大神能说一下大概的过程吗?是用Thread这个扩展吗?

回复内容:

目前是用的一个php脚本,执行请求外部接口发邮件,然后等邮件返回,得到处理结果,然后往自己的数据库记录发送结果。。
一个小时大概能处理2w条,太慢了。。

老板说用线程池来做,我现在又是一脸懵逼。。不太懂具体的做法,有大神能说一下大概的过程吗?是用Thread这个扩展吗?

刚好做过类似的事情,可以提点意见。
2w/h ≈ 5.55 QPS,的确不高。

如果按你老板的思路,一个单线程的脚本执行慢,那就多几个。那么你需要的是 pthreads 扩展(多线程),或者直接开多个进程处理(pcntl扩展甚至直接 exec 都可以)。

但从你的需求看,使得占用处理时间的主要内容是外部 IO 等待。可以考虑使用并发同时发送多封邮件(比如 multi_curl),或者异步发送邮件(比如 curl 的 async),或者整体使用个异步服务(比如 swoole 扩展)

数据表增加一个字段 process_id
插入数据库记录的时候随机给 process_id 赋值 mt_rand(1,10)
开启 10 个 PHP 脚本,
第一个脚本处理 process_id 为 1 的记录:select * from send_email_list where process_id=1 and status=0
第二个脚本处理 process_id 为 2 的记录:select * from send_email_list where process_id=2 and status=0
这样同时 10 个进程处理,这是最简单直接的方法,让你的处理速度直接提升 10 倍。

多线程,multi_curl 并发, swoole 异步都是可行解决方案。但上面的方案只需要在现有基础上进行简单改动便可以实现,可能更加适合题主。

用nodejs来做后台发送邮件服务

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!