2012-12-10 9 views
7

मैं वर्तमान में मेरे लिए उपलब्ध सामग्री से डेमनेड पर एक एपब उत्पन्न करने की कोशिश कर रहा हूं। दुर्भाग्यवश, जब एपब के लिए बहुत सारी सामग्री होती है, तो http अनुरोध को पूरा करने में कुछ समय लगता है (कुछ मामलों में 10 मिनट) - जो आदर्श नहीं हैPHP - लंबे समय तक चलने वाला पृष्ठभूमि कार्य

मैं सफारी के समान दृष्टिकोण का पालन करना चाहता हूं - जब दस्तावेज़ उपलब्ध है एक ePub उपयोगकर्ता उत्पन्न और ईमेल

मेरा प्रश्न है - क्या PHP में एक पृष्ठभूमि कार्य/धागा चलाने के लिए सबसे अच्छा तरीका है कि एक लंबे समय ले सकता है

+1

ध्यान दें कि यदि आप किसी साझा वेब होस्ट पर हैं, तो हो सकता है कि आपका होस्ट स्क्रिप्ट को लंबे समय तक निष्पादित करने की अनुमति न दे। नतीजतन, आपको काम को बाहर करना पड़ सकता है (यदि संभव हो)। –

उत्तर

16

आप लंबे समय से चलने वाली PHP प्रक्रियाओं के साथ सावधान रहना चाहते हैं, क्योंकि एक PHP बहुत मेमोरी कुशल नहीं है (उदाहरण के लिए PHP में केवल 100 इंच की सरणी 15KB स्मृति का उपभोग कर सकती है)। 99% उपयोग मामलों के लिए यह सामान्य रूप से ठीक है क्योंकि अधिकांश लोग वेबसाइटों के लिए केवल PHP का उपयोग कर रहे हैं और उन प्रक्रियाओं को दूसरी सेकंड के अंशों के लिए चलाया जाता है ताकि स्मृति के लिए स्मृति को त्याग दिया जा सके। हालांकि, एक लंबी चल रही प्रक्रिया के लिए (विशेष रूप से यदि उनमें से बहुत से हैं) यह आपका सबसे अच्छा समाधान नहीं हो सकता है।

आप भी PHP में फ़ंक्शंस जैसे निष्पादन/shell_exec को बहुत सावधान रहना चाहते हैं क्योंकि उन्हें आंतरिक रूप से धाराओं के रूप में कार्यान्वित किया जाता है (यानी वे मूल प्रक्रिया में अवरुद्ध हो सकते हैं क्योंकि इसे सामान्य रूप से डेटा वापस करने के लिए स्ट्रीम पर प्रतीक्षा करना पड़ता है)।

कार्य को पृष्ठभूमि के लिए एक विकल्प fork का उपयोग करना है। हालांकि, मैं इन कार्यों को और अधिक साफ तरीके से संभालने के लिए gearman (php extensions भी देखें) या कतार, amqp या zmq जैसे उचित नौकरी प्रबंधक का उपयोग करने का दृढ़ता से सुझाव देता हूं। आपके उपयोग के मामले में कौन सा उपयुक्त है, मैं आपको निर्णय दूंगा।

1

आप कर सकते हैं पूरा करने के लिए है आदेश

$command = 'nohup >/dev/null 2>&1 /your/background/script.php &' 
चलाएं
संबंधित मुद्दे