Python 如何使用mod_wsgi运行django并使用多进程模块?
我正在处理的工作流(用户方面)如下所示:Python 如何使用mod_wsgi运行django并使用多进程模块?,python,django,mod-wsgi,multiprocessing,Python,Django,Mod Wsgi,Multiprocessing,我正在处理的工作流(用户方面)如下所示: 用户使用表单提交信息和文件 表单已保存 完成了额外的保存后处理 这很好,但保存后处理需要相当长的时间,因此我希望在后台执行此操作,并向用户发出一条消息,通知用户正在处理,请稍后返回。不幸的是,这似乎不起作用;我现在得到的是: if form.is_valid(): p = multiprocessing.Process(target=form.save) p.start() return Htt
- 用户使用表单提交信息和文件
- 表单已保存
- 完成了额外的保存后处理
if form.is_valid():
p = multiprocessing.Process(target=form.save)
p.start()
return HttpResponseRedirect('/running')
但我得到的错误是:
IOError at /content/script/new/
sys.stdout access restricted by mod_wsgi
...
/usr/lib/python2.6/multiprocessing/forking.py in __init__
# We define a Popen class similar to the one from subprocess, but
# whose constructor takes a process object as its argument.
#
class Popen(object):
def __init__(self, process_obj):
>>>> sys.stdout.flush() ...
sys.stderr.flush()
self.returncode = None
self.pid = os.fork()
if self.pid == 0:
if 'random' in sys.modules:
▼ Local vars
Variable Value
process_obj
<Process(Process-1, initial)>
self
<multiprocessing.forking.Popen object at 0xb8a06dec>
io在/content/script/new处出错/
受mod_wsgi限制的sys.stdout访问
...
/init中的usr/lib/python2.6/multiprocessing/forking.py__
#我们定义了一个类似于subprocess的Popen类,但是
#其构造函数将流程对象作为其参数。
#
类Popen(对象):
定义初始化(自身、过程对象):
>>>>sys.stdout.flush()。。。
sys.stderr.flush()
self.returncode=None
self.pid=os.fork()
如果self.pid==0:
如果系统模块中为“随机”:
▼ 局部变量
可变值
过程对象
自己
python有没有更神奇的方法来做到这一点?Django呢?如果没有,如何继续使用多处理?使用
mod_wsgi环境可以是多线程的——这取决于您的配置。您不想干扰Apache、mod_wsgi和Django已经在使用线程和进程来管理web服务器吞吐量的方式
您必须假设Django操作是一个单线程,除了尽快响应Apache之外,无法执行任何操作。错误是因为您使用的是旧的mod_wsgi版本,而且还因为您没有阅读:
正如其他人所说,您最好还是使用芹菜之类的东西,并在Apache进程之外触发这些东西。在线程中运行它,而不是在进程中运行。或者用芹菜之类的东西。