与所有线程相关的问题一样,问题是“你是否让线程安全”?
如果您的用户服务是这样的:
# user_service.py
from some.package import database
def add_user(user_information=None):
db = database.connect()
db.insert(user_information)
def update_user(user_information=None):
db = database.connect()
db.update(user_information["user_id"], user_information)
def delete_user(user_id=None):
db = database.connect()
db.delete(user_id)
然后,假设一个甚至远程执行稳健的some.package.database
将是线程安全的。如果,另一方面,你做这样的事情:
# bad_user_service.py
from some.package import database
# Shared single connection
# Probably *not* thread safe
db = database.connect()
def add_user(user_information=None):
db.insert(user_information)
# ... etc. ...
现在,包括db = database.connect()
在您的每一个服务方法的顶部是非常不干燥。
def provide_db(func):
@functools.wraps(func)
def new_function(*args, **kwargs):
db = database.connect()
return func(db, *args, **kwargs)
return new_function
然后,你可以这样做::
# user_service.py
from your.data.layer import provide_db
@provide_db
def add_user(db, user_information=None):
db.insert(user_information)
# ... etc. ...
号,以下[PEP8(HTTP:/你可以在(例如)装饰包裹你的连接特定的工作,避免问题/www.python.org/dev/peps/pep-0008/),它应该被称为'user_service',函数应该是'add_user'和'delete_user'。 Python有它自己的编写代码的惯例,不要使用Java风格的名字等。 – Bakuriu
好的谢谢,并且这种风格只是直接调用函数ex。 user_servier.add_user()在控制器方法中是安全的。 – imrank1