为什么多处理在Django runserver上运行而不在ngnix uwsgi上运行?

我有一个使用python3.3应用程序的Django 1.6,它接收一个http请求,做短期工作,启动一个新进程并在2秒内返回.该过程通常需要50-60秒,此时它会在数据库中写入数据是空闲的,其中定时ajax调用可以检索数据并更新clint网页.

这在Django开发运行服务器上完美运行.

当我在ngnix uwsgi上部署应用程序时,快速响应会延迟50-60秒,并与完成该过程一起出现.

我记录了进入视图和发送响应之间的时间,它是1-2秒.

我用wireshark检查了数据包,并且在整个过程中所有通信都停止了,即50-60秒.

在uwsgi .ini文件中,我使用了processes = 3

我会很感激解决方案或调查线.

.ini文件:

[uwsgi], chdir=/nnnhn/, module=wsgi, #master=True, pidfile=/tmp/project-master.pid, vacuum=True, max-requests=5000, daemonize=/var/log/uwsgi.log, socket=/tmp/uwsgi.sock, uid=hhm, processes=3, pythonpath=/csghgfh/doo

过程产生代码:

process=multiprocessing.Process(target=Util.processImage1, args=(processUtil, img_full_path, snapshot.pk, process_pk, db_name, process_table_name))
process.start()

相关的衍生代码:

def processImage1(self, img_full_path, snapshot_pk, process_pk, db_name, process_table_name):
    connection.close()
    print('')
    print('I think I just closed th db connection connection')
    print('')
    print('processImage1:', datetime.now())
    print('process_pk: ', process_pk)
    sys.stdout.flush()

    try:
        con = psycopg2.connect(host = 'a', database=db_name, user='a') 
        cur = con.cursor()
最佳答案
这在uWSGI文档(可能)最重要的页面中进行了解释:http://uwsgi-docs.readthedocs.org/en/latest/ThingsToKnow.html

fork()进程时,新进程将继承连接描述符.您必须在新的分叉进程中关闭它,或者您可以添加–close-on-exec选项以自动强制它

转载注明原文:为什么多处理在Django runserver上运行而不在ngnix uwsgi上运行? - 代码日志