用python画龙卷风粒子代码_python-如何在数据库中使龙卷风请求成为原子

同步数据库访问

您尚未说明如何访问数据库.如果(可能是)您在get_val_from_db_table1和朋友(例如,使用pymysql)中具有同步数据库访问权限,而my_method正在阻止(不会将控制返回到IO循环),则您将阻止服务器(这会影响服务器的性能和响应能力) ),但有效地序列化了您的客户端,一次只能执行一个my_method.因此,就数据一致性而言,您无需执行任何操作,[email protected]��决方案在短期内解决这两个问题(代价是要牢记线程安全问题,因为Tornado的大部分功能都是isn’t thread-safe).

异步数据库访问

如果您在get_val_from_db_table1和朋友中拥有异步DB访问权限(例如,使用tornado-mysql),则可以使用tornado.locks.Lock.这是一个示例:

from tornado import web, gen, locks, ioloop

_lock = locks.Lock()

def synchronised(coro):

async def wrapper(*args, **kwargs):

async with _lock:

return await coro(*args, **kwargs)

return wrapper

class MainHandler(web.RequestHandler):

async def get(self):

result = await self.my_method('foo')

self.write(result)

@classmethod

@synchronised

async def my_method(cls, arg):

# db access

await gen.sleep(0.5)

return 'data set for {}'.format(arg)

if __name__ == '__main__':

app = web.Application([('/', MainHandler)])

app.listen(8080)

ioloop.IOLoop.current().start()

注意,以上是关于正常的单进程龙卷风应用的说法.如果使用tornado.process.fork_processes,则只能使用multiprocessing.Lock.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值