php - 从 PHP 启动独立的 Python 进程

标签 php python linux apache yii

我有一项任务要求我处理大量数据同步,由于脚本执行时间短,PHP 无法处理。我的选择是启动 Python 脚本并让 PHP 终止(向用户显示“成功完成”等消息)。我已经尝试了我可以在 SO 和其他地方通过谷歌找到的所有选项,但都没有用。

在我第一次尝试失败后,我提出了这个想法,我的 PHP 脚本将启动第一个 Python 脚本(我们称之为 testcmd.py)。然后,他们的 Python 脚本将启动和独立的进程(我们称之为 thecommand.py),它没有绑定(bind)到它(就像分离线程那样)并终止。这将避免挂起 PHP 脚本同时完成我想要的

不幸的是,我还没有找到一种从 testcmd.py 独立启动 thecommand.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

command.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

最佳答案

通常用于执行此类任务的方法是让后台运行的“工作”线程定期检查“工作队列”。他们的工作人员然后根据需要处理事情(并且不需要启动子线程,因为它不受 Web 服务器的执行时间限制)。

所以尝试从那开始。您的队列可以在您的数据库中,您的后台作业可以是每分钟(或 5 分钟等)检查一次的 cronjob。

这也意味着您不需要启动 Python 脚本,但可以使用另一个 PHP 脚本(如果它更适合您的业务逻辑)。

关于php - 从 PHP 启动独立的 Python 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26293463/

相关文章:

php - 如何修复我的氡转化?

php - Php 中的路由和装饰器模式

php - 如何从 DATETIME 列中仅提取时间

PHP 使用 < 和 > 代替 < 和 >

python - 从 XML 内容生成静态 HTML 站点

python - BeautifulSoup不会使用selenium获取页面源

python - Jinja2 未获取模板 "No template file present: default.j2 "

c - 处理蝾螈回调

linux - centos启动Freeswitch失败?

linux - 返回文件树目录深度的递归函数