0

私はos.fork()djangoビューで作成しようとしていますが、エラーが発生します: Port 8000 already in use. 私が理解しているように、os.fork()ファイル記述子の継承を行うと、2 つのプロセスで同じポートに 2 つのソケットが取得されます。

   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()と、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

私はこれを別のプロセスとして正確に行う必要があり、セロリなどの 3-d パーティ アプリを使用したくありません。

4

1 に答える 1

1

正しい解決策は、セロリ (http://docs.celeryproject.org/en/latest/) または同等のものを使用することだと思います。

于 2012-11-26T14:58:18.913 に答える