鍍金池/ 問答/Python  網(wǎng)絡(luò)安全/ uwsgi 部署的django 如何平穩(wěn)運(yùn)行 subprocess ?

uwsgi 部署的django 如何平穩(wěn)運(yùn)行 subprocess ?

我使用uwsgi部署django,在django程序中使用subprocess調(diào)用系統(tǒng)安裝的pdf2htmlEX。
當(dāng)使用django自帶的manage.py runserver時,服務(wù)正常運(yùn)行。
但使用uwsgi部署后,subprocess 的 returncode 為 -11,據(jù)查是段錯誤的意思。
但同樣的環(huán)境,同樣的參數(shù)與文件,runserver調(diào)用狀態(tài)正常,單獨(dú)跑python程序調(diào)用也正常,但使用uwsgi部署后調(diào)用就不正常,這是怎么回事?
(查了有說在uwsgi設(shè)置里加 close-on-exec,但加了也不好使。。。。)
代碼如下形式。

from subprocess import call
def pdf2html(pdfpath,outputpath,filename):
    '''將pdf轉(zhuǎn)為html,字體文件與html文件同級'''
    if not os.path.exists(outputpath + '/' + filename):
        os.mkdir(outputpath + '/' + filename)
    shellstr = ['pdf2htmlEX', '--dest-dir', outputpath + '/' + filename, '--embed-font', '0','--embed-image', '0','--embed-external-font', '0','--embed-css', '0', '--no-drm', '1', pdfpath + '/' + filename + '.pdf']
    print(shellstr)
    shellresult = call(shellstr,shell=False,close_fds=True)
    return shellresult

def 接口(request):
    #......
    returncode = pdf2html(...) #用uwsgi部署后,同樣的參數(shù)在這就返回 -11 。

我的uwsgi配置:

# backend_uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /home/serverend/comengine

# Django's wsgi file
module          = comengine.wsgi

 
# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 8
threads         = 4

post-buffering = 65536

buffer-size = 65536

# the socket (use the full path to be safe),將socket寫入sock文件,安全又便捷
socket          = /home/serverend/comengine/comengine/comengine.sock

# ... with appropriate permissions - may be needed
chmod-socket    = 666

# clear environment on exit
vacuum          = true

uwsgi_read_timeout = 60000
uwsgi_send_timeout = 60000

#不記錄access log
disable-logging = true

#設(shè)置每個工作進(jìn)程的最大請求數(shù),超過該請求數(shù),該工作進(jìn)程就會回收重啟
max-requests = 1000

#當(dāng)某個工作進(jìn)程占用內(nèi)存超過1000M時,該工作進(jìn)程回收重啟
reload-on-as = 50000
reload-on-rss = 8500

#據(jù)說加上這個鎖比較安全
thunder-lock

# 設(shè)置在平滑的重啟(直到接收到的請求處理完才重啟)一個工作子進(jìn)程中,等待這個工作結(jié)束的最長秒數(shù)。這個配置會使在平滑地重啟工作子進(jìn)程中,如果工作進(jìn)程結(jié)束時間超過了72000秒就會被強(qiáng)行結(jié)束(忽略之前已經(jīng)接收到的請求而直接結(jié)束)
worker-reload-mercy = 72000

#ignore-sigpipe  = true
#ignore-write-errors = true
#disable-write-exception = true

close-on-exec = true

touch-logreopen = /home/serverend/nginxsetting/log/.touchforlogrotate
daemonize = /home/serverend/nginxsetting/log/uwsgi.log
回答
編輯回答
朕略傻

你好,請問你的 uwsgi 部署的django 如何平穩(wěn)運(yùn)行 subprocess ? 這個問題是怎么解決的?我也碰到這個問題了,請教一下

2018年7月22日 18:16
編輯回答
胭脂淚

已經(jīng)解決了。

2018年1月7日 03:05