安装py

3.8往上的我之前安装过会有各种问题,最好3.7或者3.8,因为本机用的是3.8.8能正常使用,所以这里也用了3.8.8。

下载 Python源码

sudo apt update
sudo apt install build-essential zlib1g-dev libncurses5-dev \
libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev \
libreadline-dev libffi-dev curl libbz2-dev curl -y

curl -O https://www.python.org/ftp/python/3.8.8/Python-3.8.8.tar.xz

配置 Python构建

tar -xf Python-3.8.8.tar.xz
cd Python-3.8.8/
./configure --enable-optimizations

编译 Python

先用nproc指令查一下内核数,这里查出来是4:

make -j 4
sudo make altinstall
python3.8 --version

基础flask服务

基础代码

这里简单用flask + paddlenlp起一个匹配语义相似度的服务,阈值为0.7

from flask import Flask, redirect, url_for, request
import json
from paddlenlp import Taskflow
import threading
similarity = Taskflow("text_similarity")
lock = threading.Lock()

app = Flask(__name__)



@app.route('/getss',methods = ['POST'])
def getss():
print(request.json)
lock.acquire()
result = similarity(request.json)
lock.release()
flag = -1
score = 0.7
for index,obj in enumerate(result):
print(obj['similarity'])
if(obj['similarity'] > score and obj['similarity'] <= 1):
score = obj['similarity']
flag = index
if(flag != -1):
print(result[flag])

return json.dumps(flag)


if __name__ == '__main__':
app.run(host="0.0.0.0",port=5000, debug=True)

安装依赖

pip3.8 install flask
pip3.8 install paddlepaddle
pip3.8 install paddlenlp
python3.8 main.py

然后先运行起来,看看缺什么依赖,再补充,我这里会显示缺_lzma

apt-get install liblzma-dev -y
pip3.8 install backports.lzma
# 根据提示路径找到lzma.py,然后做以下修改
# 修改前
from _lzma import *
from _lzma import _encode_filter_properties, _decode_filter_properties

# 修改后
try:
from _lzma import *
from _lzma import _encode_filter_properties, _decode_filter_properties
except ImportError:
from backports.lzma import *
from backports.lzma import _encode_filter_properties, _decode_filter_properties

直到执行python3.8 main.py,即出现localhost和ip即算正常启动。

后台执行

挂起

nohup python3.8 -u main.py > test.out 2>&1 &
# 其中 012分别代表如下含义:
# 0 – stdin (standard input)
# 1 – stdout (standard output)
# 2 – stderr (standard error)
# nohup python -u main.py > test.out 2>&1 &
# nohup+最后面的& 是让命令在后台执行
# >out.log 是将信息输出到out.log日志中
# 2>&1 是将标准错误信息转变成标准输出,这样就可以将错误信息输出到out.log 日志里面来。

运行命令后,会返回一个pid。像下面这样:

[1] 9208

结束程序

先查找到pid。

ps -ef | grep python

找到对应的pid后,或者你还记得之前生成的pid,直接调用kill命令结束即可。

kill -9 9208

意思为强制结束(kill)进程号为9208的进程。-9表示使用SIGKILL信号强制结束进程。

注意

如果你用的是别的版本的,对应的pip和python也要换成你的版本,如你的py是3.7,那么对应的指令要换成python3.7和pip3.7。

参考链接

如何在Ubuntu 18.04安装Python 3.7
ModuleNotFoundError: No module named ‘_lzma’
在Ubuntu下后台持续运行Python程序