Когда я пишу веб-приложения на Python, я всегда держу свой веб-сервер в том же процессе, что и мои фоновые задачи. Я не знаю, какой веб-сервер вы используете, но я лично использую CherryPy . У вашего приложения может быть множество потоков, которые могут быть веб-сервером, с любым другим количеством потоков, которые вам нравятся в качестве фоновых задач. Таким образом, вам не нужен какой-либо сложный IPC с сокетами, именованными каналами и т. Д. Вместо этого вы просто получаете доступ к общим, глобальным, синхронизированным структурам данных для передачи информации, и ваши разные модули могут напрямую вызывать функции друг друга.
РЕДАКТИРОВАТЬ: Чтобы уточнить, вы можете использовать модуль потоков для запуска вашего сервера CherryPy в других потоках, чем другие блокирующие серверы. Например:
def listener():
sock = get_socket_from_somewhere()
while True:
client, addr = sock.accept()
# send data back to client, etc
from threading import Thread
t1 = Thread(target=listener)
t1.setDaemon(True)
t1.start()
cherrypy.quickstart() # you'd need actual arguments here
В этом примере показано, как создать блокирующий сервер в одном потоке в том же процессе, что и веб-сервер (в данном случае CherryPy, хотя это может быть что угодно).