mik*_*ike 10 php cron beanstalkd
我正试图找出每天数千次运行一个非常重要的PHP任务的最有效方法.它需要与Gmail建立IMAP连接,循环显示电子邮件,将此信息保存到数据库并在本地保存图像.
使用cron经常运行这个任务并不是什么大不了的事,但我需要每分钟都运行它,我知道最终crons将开始在彼此之上运行并导致内存问题.
当您需要每分钟多次有效地运行任务时,下一步是什么?我一直在读关于beanstalk和pheanstalk的事情,我不完全确定这是否能满足我的需求.思考???
创建一个锁定机制,使脚本不会重叠.这非常简单,因为脚本每分钟只运行一次,一个简单的.lock文件就足够了:
<?php
if (file_exists("foo.lock")) exit(0);
file_put_contents("foo.lock", getmypid());
do_stuff_here();
unlink("foo.lock");
?>
Run Code Online (Sandbox Code Playgroud)
这将确保脚本不会并行运行,您只需确保在程序退出时删除.lock文件,因此您应该有一个退出点(开头的退出除外).
正如Brian Roach建议的那样,一个很好的替代方案是一个专用的服务器进程,它始终运行并保持与IMAP服务器的连接.这样可以减少很多开销,并且比编写普通的php脚本要难得多:
<?php
connect();
while (is_world_not_invaded_by_aliens())
{
get_mails();
get_images();
sleep(time_to_next_check());
}
disconnect();
?>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
854 次 |
最近记录: |