[英]Forking in Django
我正在嘗試在django視圖中制作os.fork()
並得到一個錯誤: Port 8000 already in use
。 據我了解,當我執行os.fork()
文件描述符時,我在兩個進程的同一端口中獲得了兩個套接字。
def view(request):
...
if not os.fork():
target()
return
def target(*args, **kwargs):
...
sd = socket.socket(*args, **kwargs)
sd.bind(*args)
sd.listen()
nsd = sd.accept()
...
如果我在子項中對打開的描述符執行os.close()
, os.close()
收到WSGI錯誤:
for i in os.listdir("/proc/%s/fd" % os.getpid()):
os.close(int(i))
Traceback (most recent call last):
File "/usr/lib/python2.6/wsgiref/handlers.py", line 94, in run
self.finish_response()
File "/usr/lib/python2.6/wsgiref/handlers.py", line 135, in finish_response
self.write(data)
File "/usr/lib/python2.6/wsgiref/handlers.py", line 218, in write
self.send_headers()
File "/usr/lib/python2.6/wsgiref/handlers.py", line 274, in send_headers
self.send_preamble()
File "/usr/lib/python2.6/wsgiref/handlers.py", line 197, in send_preamble
self._write('HTTP/%s %s\r\n' % (self.http_version,self.status))
File "/usr/lib/python2.6/wsgiref/handlers.py", line 404, in _write
self.stdout.write(data)
File "/usr/lib/python2.6/socket.py", line 318, in write
self.flush()
File "/usr/lib/python2.6/socket.py", line 297, in flush
self._sock.sendall(buffer(data, write_offset, buffer_size))
error: [Errno 9] Bad file descriptor
我需要將此技巧作為單獨的過程,並且我不想使用3D派對應用程序(例如芹菜)。
我認為正確的解決方案是使用celery(http://docs.celeryproject.org/en/latest/)或等效方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.