Использование Twisted для этого звучит так, как будто имеет смысл.Низкоуровневым API, поддерживающим запущенные процессы в Twisted, является pipeline.spawnProcess .Некоторые примеры его использования приведены в документе howto .
Этот API хорошо подходит для работы со многими долго выполняющимися процессами и, как и со всеми API ввода / вывода в Twisted, онхорошо работает в сочетании с другим источником событий, таким как веб-сервер , который пользователи могут использовать для запроса запуска новых процессов.
reactor.spawnProcess
больше похож на модуль стандартной библиотеки подпроцесса, чем наmultiprocessing
пакет.Это дает вам способ запустить дочерний процесс, выполняющий определенный исполняемый файл, с определенными аргументами и т. Д. Он не предоставляет высокоуровневый API для запуска определенной функции Python в другом процессе.Тем не менее, это не так сложно построить такую вещь (по крайней мере, для конкретного случая).Рассмотрим следующий подход:
from sys import executable
from os import environ
from twisted.internet import reactor
implementation = """\
from yourapp import somefunction
somefunction()
"""
reactor.spawnProcess(executable, [executable, "-c", implementation], env=environ)
reactor.run()
Это просто запускает новый интерпретатор Python (какой бы он ни выполнялся) и использует параметр -c, чтобы указать программу в командной строке для запуска.