Я пытаюсь запустить веб-сервер внутри процесса. (Отвечайте на этот вопрос, почему мне нужно использовать многопроцессорность: остановка даш-сервера внутри потока не работает)
Это небольшой пример:
import logging
from dash import html, Dash
from flask import Flask
from multiprocessing import Process
############################## setup logger #############################
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(threadName)s, %(levelname)s] %(message)s",
handlers=[
logging.FileHandler("logs.log"),
logging.StreamHandler()
]
)
#########################################################################
class test:
def __init__(self):
flask_app = Flask(__name__)
self.app = Dash(__name__, server=flask_app)
# Define a simple layout
self.app.layout = html.Div(children=[
html.H1(children='Hello Dash'),
html.P(children='This is a simple Dash app for testing.'),
html.Button('Click Me', id='button')
])
def prepare_webserver(self):
self.server_proc = Process(target=self.run_server,
name='dash_server',
daemon=True)
self.server_proc.start()
# Function to run the server
def run_server(self):
logging.info("Starting Dash server")
self.app.run_server(debug=True, use_reloader=False)
if __name__ == "__main__":
sim_manager = test()
sim_manager.prepare_webserver()
И я получаю следующую ошибку:
Traceback (последний последний вызов):
File "C:\Users\username\Desktop\Projects\python_framework\optimization_framework\test2.py", line 42, in
sim_manager.prepare_webserver()
File "C:\Users\username\Desktop\Projects\python_framework\optimization_framework\test2.py", line 33, in prepare_webserver
self.server_proc.start()
File "C:\Users\username\AppData\Local\Programs\Python\Python310\lib\multiprocessing\process.py", line 121, in start
self._popen = self._Popen(self)
File "C:\Users\username\AppData\Local\Programs\Python\Python310\lib\multiprocessing\context.py", line 224, in _Popen
return _default_context.get_context().Process._Popen(process_obj)
File "C:\Users\username\AppData\Local\Programs\Python\Python310\lib\multiprocessing\context.py", line 327, in _Popen
return Popen(process_obj)
File "C:\Users\username\AppData\Local\Programs\Python\Python310\lib\multiprocessing\popen_spawn_win32.py", line 93, in __init__
reduction.dump(process_obj, to_child)
File "C:\Users\username\AppData\Local\Programs\Python\Python310\lib\multiprocessing\reduction.py", line 60, in dump
ForkingPickler(file, protocol).dump(obj)
AttributeError: Can't pickle local object 'Flask.__init__..'
Traceback (most recent call last):
File "", line 1, in
File "C:\Users\username\AppData\Local\Programs\Python\Python310\lib\multiprocessing\spawn.py", line 116, in spawn_main
exitcode = _main(fd, parent_sentinel)
File "C:\Users\username\AppData\Local\Programs\Python\Python310\lib\multiprocessing\spawn.py", line 126, in _main
self = reduction.pickle.load(from_parent)
EOFError: Ran out of input
Подробнее здесь: https://stackoverflow.com/questions/785 ... lambda-due
AttributeError: невозможно выбрать локальный объект «Flask.__init__..» из-за многопроцессорности ⇐ Python
Программы на Python
1731609178
Anonymous
Я пытаюсь запустить веб-сервер внутри процесса. (Отвечайте на этот вопрос, почему мне нужно использовать многопроцессорность: остановка даш-сервера внутри потока не работает)
Это небольшой пример:
import logging
from dash import html, Dash
from flask import Flask
from multiprocessing import Process
############################## setup logger #############################
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(threadName)s, %(levelname)s] %(message)s",
handlers=[
logging.FileHandler("logs.log"),
logging.StreamHandler()
]
)
#########################################################################
class test:
def __init__(self):
flask_app = Flask(__name__)
self.app = Dash(__name__, server=flask_app)
# Define a simple layout
self.app.layout = html.Div(children=[
html.H1(children='Hello Dash'),
html.P(children='This is a simple Dash app for testing.'),
html.Button('Click Me', id='button')
])
def prepare_webserver(self):
self.server_proc = Process(target=self.run_server,
name='dash_server',
daemon=True)
self.server_proc.start()
# Function to run the server
def run_server(self):
logging.info("Starting Dash server")
self.app.run_server(debug=True, use_reloader=False)
if __name__ == "__main__":
sim_manager = test()
sim_manager.prepare_webserver()
И я получаю следующую ошибку:
Traceback (последний последний вызов):
File "C:\Users\username\Desktop\Projects\python_framework\optimization_framework\test2.py", line 42, in
sim_manager.prepare_webserver()
File "C:\Users\username\Desktop\Projects\python_framework\optimization_framework\test2.py", line 33, in prepare_webserver
self.server_proc.start()
File "C:\Users\username\AppData\Local\Programs\Python\Python310\lib\multiprocessing\process.py", line 121, in start
self._popen = self._Popen(self)
File "C:\Users\username\AppData\Local\Programs\Python\Python310\lib\multiprocessing\context.py", line 224, in _Popen
return _default_context.get_context().Process._Popen(process_obj)
File "C:\Users\username\AppData\Local\Programs\Python\Python310\lib\multiprocessing\context.py", line 327, in _Popen
return Popen(process_obj)
File "C:\Users\username\AppData\Local\Programs\Python\Python310\lib\multiprocessing\popen_spawn_win32.py", line 93, in __init__
reduction.dump(process_obj, to_child)
File "C:\Users\username\AppData\Local\Programs\Python\Python310\lib\multiprocessing\reduction.py", line 60, in dump
ForkingPickler(file, protocol).dump(obj)
AttributeError: Can't pickle local object 'Flask.__init__..'
Traceback (most recent call last):
File "", line 1, in
File "C:\Users\username\AppData\Local\Programs\Python\Python310\lib\multiprocessing\spawn.py", line 116, in spawn_main
exitcode = _main(fd, parent_sentinel)
File "C:\Users\username\AppData\Local\Programs\Python\Python310\lib\multiprocessing\spawn.py", line 126, in _main
self = reduction.pickle.load(from_parent)
EOFError: Ran out of input
Подробнее здесь: [url]https://stackoverflow.com/questions/78525438/attributeerror-cant-pickle-local-object-flask-init-locals-lambda-due[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия