Python中的异步编程
我在Twisted中开发反向代理时遇到问题。这是可行的,但似乎过于复杂和复杂。很多感觉都像是巫毒 在web或书籍中是否有任何简单、可靠的异步程序结构示例?一种最佳实践指南?当我完成我的程序时,我希望能够以某种方式看到结构,而不是看着一碗意大利面。Twisted包含一个。特别是,包含了异步程序如何从一个非常小的内核发展到一个包含许多运动部件的复杂系统的详细解释。另一个你可能感兴趣的是关于simply的教程 关于Twisted,甚至其他异步网络库(例如,或),需要记住的关键一点是,您的代码只有在发生某些事情时才会被调用。我听到的最像“巫毒”的部分是回调的管理:例如,Python中的异步编程,python,asynchronous,twisted,Python,Asynchronous,Twisted,我在Twisted中开发反向代理时遇到问题。这是可行的,但似乎过于复杂和复杂。很多感觉都像是巫毒 在web或书籍中是否有任何简单、可靠的异步程序结构示例?一种最佳实践指南?当我完成我的程序时,我希望能够以某种方式看到结构,而不是看着一碗意大利面。Twisted包含一个。特别是,包含了异步程序如何从一个非常小的内核发展到一个包含许多运动部件的复杂系统的详细解释。另一个你可能感兴趣的是关于simply的教程 关于Twisted,甚至其他异步网络库(例如,或),需要记住的关键一点是,您的代码只有在发生
延迟
。如果您习惯于编写直线运行的代码,并且只调用立即返回结果的函数,那么等待某个东西调用您的想法可能会令人困惑。但是回调没有什么神奇的,没有“巫毒”。在最底层,反应堆只是坐在那里,等待一小部分事情发生:
dataReceived
)callLater
中注册的函数)listenXXX
或connectXXX
函数注册的工厂上调用buildProtocol
)connectionLost
)# Engine
import time
class SimplestReactor(object):
def __init__(self):
self.events = []
self.stopped = False
def do(self, something):
self.events.append(something)
def run(self):
while not self.stopped:
time.sleep(0.1)
if self.events:
thisTurn = self.events.pop(0)
thisTurn()
def stop(self):
self.stopped = True
reactor = SimplestReactor()
# Application
def thing1():
print 'Doing thing 1'
reactor.do(thing2)
reactor.do(thing3)
def thing2():
print 'Doing thing 2'
def thing3():
print 'Doing thing 3: and stopping'
reactor.stop()
reactor.do(thing1)
print 'Running'
reactor.run()
print 'Done!'
在Twisted等库的核心,主循环中的函数不是
sleep
,而是一个操作系统调用,如select()
或poll()
,由类似的模块公开。我之所以说“like”select
,是因为这是一个在不同平台之间变化很大的API,而且几乎每个GUI工具包都有自己的版本。Twisted目前为此主题提供了14种不同变体的抽象接口。这种API提供的一个常见功能是提供一种方式来表示“以下是我正在等待的事件列表。在其中一个事件发生之前先睡觉,然后醒来告诉我是哪一个事件。”我希望您在twisted上有更好的运气。它目前是我最喜欢的框架之一。