for문을 돌릴때 인터벌을 줄 수는 없나요?
본문
소스 구성이 부득이하게 동시에 두 개의 function을 호출하는 상황입니다.
문제는 두개의 function중 1개는 빠르게 응답 결과가 나오지만 나머지 하나는 평균 10초 정도의 응답시간이 요구 됩니다.
그러다보니 중간에 적체 현상이 발생되어 메모리 초과가 되어버립니다.
그래서 아예 for문을 돌릴 때 1번의 루프당 15초 정도로 강제시키고 싶은데 방법을 못찾겠습니다.
sleep()을 썻더니 아예 서버가 멈추는듯 하고요
좋은 아이디어가 있으면 좀 알려주세요
감사합니다.
답변 5
crontab을 사용하시면서 flag를 만들어 보시는게 어떨까 싶네요.
xml을 생성하는 함수는 계속해서 진행 하고 있고
xml을 전송하는 함수는 몇 초마다 한번씩 crontab으로 실행을 합니다.
xml을 정상적으로 전송했다면 해당 파일이든 데이터베이스든 어디든 flag를 둬서 정상 전송 완료를 저장해두고 다시 점검 전송 하는 일이 없게 하면 되지 않을까요?
http://zetawiki.com/wiki/PHP_%EB%B0%B0%EC%B9%98_%EC%9E%91%EC%97%85
php와 crontab을 활용하는 튜토리얼입니다. 참고로 봐주시면 됩니다.
전 이런식으로 몇일 돌리거나 하거든요
<?php
ini_set("memory_limit","128M");
set_time_limit(0);
php에서 sleep(15) 이보다 좋은 선택 없을 것 같다고 봅니다.
for(;;){
sleep(15);
echo "일하고 있나..\n";
flush();
}
제가 질문을 잘 못 이해한 것 같네요
php에서 sleep()는 그 시간동안 암것도 안해요.
결국 10초 걸리는 함수 호출 이라면
sleep(5) 해서 15초 만들어야겠네요 ㅎ
10정도 걸리는 일이 뭐냐에 따라 달라 질수는 있어요.
메모리 문제는 메모리 제한 늘려주면 되구요
php는 문자처리하는데 메모리를 많이 사용하는 것 같더군요
가령 웹파싱이나 이런거라면 curl_multi_exec 사용해서 진행하면 되고
무엇을 10초동안 그 많은 메모리를 사용해서 작업해야하는지를 알면 좀 더 다양한 방법이 나오겠죠