安装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 &
# 其中 0、1、2分别代表如下含义:
# 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程序