У меня есть задача, требующая от меня работать с массивной синхронизацией данных, которую PHP не может обработать из-за короткого времени выполнения скрипта. Опция, которую я имею, заключается в запуске скрипта Python и прекращении работы PHP (с таким сообщением, как «Успешно сделано»). Я пробовал все параметры, которые я мог найти здесь, в SO и в другом месте, которые я нашел через google, но никто не работает.Запуск независимого процесса Python с PHP
После того как я потерпел неудачу с первой попыткой, я придумал эту идею, мой PHP-скрипт запустит первый скрипт Python (позвонит testcmd.py
). Затем скрипт Python запускает и независимый процесс (позволяет называть его thecommand.py
), который не привязан к нему (что-то вроде отдельных потоков) и завершается. Это позволит избежать подвешивания PHP скрипт в то же время сделать то, что я хочу
К сожалению, я до сих пор найти способ самостоятельно запускать thecommand.py
из testcmd.py
Я пытался много вещей, но вот мой текущий код. Если у вас есть лучшая идея о том, как это сделать, я с удовольствием поеду по этому маршруту.
run_command.php
$cmd = "./testcmd.py";
$output = [];
exec("$cmd 2>&1", $output, $return_status);
print_r($output);
echo $return_status;
testcmd.py
#!/usr/bin/env python
import subprocess
import sys
# some code here
print "Launching Command"
#proc = Popen([cmd_str], shell=True,
# stdin=None, stdout=None, stderr=None, close_fds=True)
pid = subprocess.Popen([sys.executable, "/path/to/file/no/spaces/in/path/thecommand.py"], stdin=None, stdout=None, stderr=None, close_fds=True) # call subprocess
thecommand.py
#!/usr/bin/env python
import json
import urllib2
url = 'http://some/api/url/here/2'
data = urllib2.urlopen(url).read()
js = json.JSONDecoder().decode(data)
for user in js:
print js
так что в основном вы говорите, что cron запускает задание, пусть говорит 5 минут, которое затем проверяет запись db и как только ее сделанные знаки каким-то образом? Как такая периодическая проверка позволяет сказать через 5 минут добавить нагрузку на сервер? Я предполагаю, что нет, но хотел бы услышать –
Это верно, повторив запись в db. Re сервер нагрузки, это не так много, как если бы нечего обрабатывать, то процесс просто может просто выйти. Единственное различие между моим предложением и тем, о чем вы думали, это регулярное время запуска. Помимо этого, выполнение процесса будет выполняться в большинстве случаев. И это произойдет независимо. – acorncom
Круто спасибо большому приятелю –