没有项目描述
pulsar-odm的Python项目详细描述
Badges: | |
---|---|
Master CI: | |
Downloads: | http://pypi.python.org/pypi/pulsar-odm |
Source: | https://github.com/quantmind/pulsar-odm |
Mailing list: | google user group |
Design by: | Quantmind and Luca Sbardella |
Platforms: | Linux, OSX, Windows. Python 3.5 and above |
Keywords: | sql, sqlalchemy, asynchronous, asyncio, concurrency, greenlet |
脉冲星odm是建立在pulsar、sqlalchemy和greenlet库之上的 提供隐式异步对象数据映射器,用于编写代码 用asyncio。 目前只实现并测试了一种方言:
Usage
为了能够在标准块代码中使用对象数据映射器, 需要使用pulsar GreenPool作为以下片段的亮点:
fromdatetimeimportdatetimefromsqlalchemyimportInteger,Column,String,DateTime,Booleanfrompulsar.apps.greenioimportGreenPoolimportodmclassTask(odm.Model):id=Column(Integer,primary_key=True)subject=Column(String(250))done=Column(Boolean,default=False)created=Column(DateTime,default=datetime.utcnow)def__str__(self):return'%d: %s'%(self.id,self.subject)defexample(mp):# Make sure table is availablemp.table_create()# Insert a new Task in the tablewithmp.begin()assession:task=mp.task(subject='my task')session.add(task)returntaskif__name__=='__main__':pool=GreenPool()mp=odm.Mapper('postgresql+green://odm:odmtest@127.0.0.1:5432/odmtests')mp.register(Task)task=pool._loop.run_until_complete(pool.submit(example,mp))print(task)
example函数是在主函数以外的一个greenlet中执行的。这一点很重要,否则呼叫将失败:
>>example(mp)>>Traceback(mostrecentcalllast):...RuntimeError:acquireinmaingreenlet
在greenlet池上运行该函数可以保证正确的异步执行。当psycopg2 对子greenlet上的数据库执行命令,它将控制切换到父(主)greenlet,后者由asyncio eventloop控制,以便可以执行其他异步操作。 一旦执行结果就绪,执行就会切换回原始的子greenlet,以便example函数可以继续。