Ниже перечислены любые глобальные данные Python, которые вы не хотите воссоздавать для каждого запроса, а не только rserve, а не только данные, которые уникальны для каждого пользователя.
Нам нужно некоторое общее местоположение создать соединение rserve для каждого пользователя. Самый простой способ сделать это - запустить multiprocessing.Manager
в качестве отдельного процесса.
import atexit
from multiprocessing import Lock
from multiprocessing.managers import BaseManager
import pyRserve
connections = {}
lock = Lock()
def get_connection(user_id):
with lock:
if user_id not in connections:
connections[user_id] = pyRserve.connect()
return connections[user_id]
@atexit.register
def close_connections():
for connection in connections.values():
connection.close()
manager = BaseManager(('', 37844), b'password')
manager.register('get_connection', get_connection)
server = manager.get_server()
server.serve_forever()
Запустить его перед запуском приложения, чтобы менеджер был доступен:
python rserve_manager.py
Мы можем получить доступ к этому менеджеру из приложения во время запросов, используя простую функцию. Это предполагает, что у вас есть значение для «user_id» в сеансе (что, например, делает Flask-Login). Это приведет к уникальному уникальному соединению rserve для каждого пользователя, а не к сеансу.
from multiprocessing.managers import BaseManager
from flask import g, session
def get_rserve():
if not hasattr(g, 'rserve'):
manager = BaseManager(('', 37844), b'password')
manager.register('get_connection')
manager.connect()
g.rserve = manager.get_connection(session['user_id'])
return g.rserve
Доступ к нему внутри представления:
result = get_rserve().eval('3 + 5')
Это должно помочь вам начать, хотя есть много возможностей, которые можно улучшить, например, не жестко кодировать адрес и пароль, а не отбрасывать соединения с менеджером. Это было написано с помощью Python 3, но должно работать с Python 2.
Symfony Forms будет использовать get<Property>
и set<Property>
для чтения и записи данных модели. В вашем случае, поскольку у вас нет метода setGroupe()
в Контакте, форма не знает, как записать значение обратно в сущность при отправке формы.
Для этого сценария формы Symfony имеют Data Mappers .
Устройства отображения данных отвечают за чтение и запись данных из родительских форм и в них.
blockquote>В вашем случае вам, вероятно, понадобится что-то вроде этого:
public function mapFormToData($forms, &$data) { $forms = iterator_to_array($forms); // "groupe" is the name of the field in the ContactType form $groupe = $forms['groupe']; foreach ($groupe as $group) { // $data should be a Contact object $data->addGroup($group); } // ...Map remaining form fields to $data }