Мое приложение uWSGI должно порождать долго выполняющуюся задачу Python, поэтому я использую multiprocessing
. Однако, когда я запускаю этот дочерний процесс, сервер не закрывает сокет, пока дочерний процесс не завершится.
Чтобы помочь в отладке, я также порождал дочерний процесс, используя Popen
, а сервер не ожидает завершения процесса popen.
Я включил close-on-exec
согласно этому ответу , и шаг multiprocessing.Process
по-прежнему блокирует сервер.
Пример кода сервера:
import multiprocessing, subprocess
def _helper(url):
import time
time.sleep(10)
def download(url):
# server closes socket if this is still running, as expected
p = subprocess.Popen(["/bin/sleep", "1000"])
# server does not close socket until this finishes
multiprocessing.Process(target=_helper, args=(url,)).start()
def application(env, start_response):
download("sample_url")
print("download() returned!")
start_response("200 OK", [("Content-Type", "text/html")])
return [b"ok"]
Я запускаю сервер с uwsgi --socket 127.0.0.1:9090 --wsgi-file server.py --close-on-exec
и использую uWSGI 2.0.18 с Python 3.6.8.