在编写异步API时,我可以使用哪些有用的习惯用法?我希望标准化一些东西,因为我似乎总是使用一些不同的样式。似乎很难使异步代码变得简单;我想这是因为异步操作不过是。
在最基本的层面上,API的用户必须能够:
我的类支持多个异步操作。我一直在课堂上放置一些状态/错误回调,但是这个类在很多偶然的字段中变得很糟糕,而且变得太大了。我很好奇是否有人使用过他们发现组织良好的异步API。我查看了.NET的Begin / EndAsyncOperation + AsyncResult设计,以及Java中的一些类(例如Future)。
这是用Python编写的,所以它仍然非常灵活。有一点需要注意:其中一些异步操作正在被封送到远程机器并在那里执行。因此,并非每个操作都必须在单独的线程中执行。
答案 0 :(得分:4)
您可能需要查看Python Twisted。这是一个很好的基于Reactor的API,支持asynchronous操作。 Proactor是异步完成处理程序(如框架)的常用术语。
答案 1 :(得分:2)
另请参阅Asynchronous Completion Token和ActiveObject模式。
答案 2 :(得分:2)
这听起来像 Observer 设计模式。 link
您的客户端对象是观察者。您的API属于可观察的对象。
每个客户端(用Java术语)实现 Observer 接口。在Python中,每个客户端都提供了一些您的observable将使用的方法。
class SomeClientInterface( object ):
def update( self, source, data ):
# handle data being pushed from Observable source
def error( self, from, status ):
# handle error in Observable source
您的Observable对象有一种观察者注册和执行其他操作的方法。
class Observable( object ):
def __init__( self ):
self.clients= set()
def register( self, observer ):
self.clients.add( observer )
def whenSomethingHappens( self ):
# doing work
if itAllWentToHell:
for c in self.clients:
c.error( self, "some status object" )
else:
for c in self.clients:
c.update( self, the pushed data )
def waitFor( self ):
# observers are waiting...
return theData
def status( self ):
return self.currentState