简体   繁体   English

在Django中分叉

[英]Forking in Django

I am trying to make os.fork() in django view and get an error: Port 8000 already in use . 我正在尝试在django视图中制作os.fork()并得到一个错误: Port 8000 already in use As I understand when I do os.fork() file descriptors inherits and I get two sockets in the same port in two processes. 据我了解,当我执行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()
      ...

If I do os.close() in child for opened descriptors, I get WSGI-error: 如果我在子项中对打开的描述符执行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

I need to this exaclty as separate process and I do not want use 3-d party apps such as celery. 我需要将此技巧作为单独的过程,并且我不想使用3D派对应用程序(例如芹菜)。

我认为正确的解决方案是使用celery(http://docs.celeryproject.org/en/latest/)或等效方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM