python - 扭曲 - 交互地对函数进行排队

标签 python asynchronous twisted reactor

我刚刚被介绍到扭曲通过 this nice tutorial对于聊天应用程序,但我不确定如何使其适应我的需求。

假设,我一时兴起,希望聊天服务器向所有客户端发送一条友好的消息,例如“快乐长周末!”。即我想让 react 堆运行一些东西,但是在它已经运行之后(所以我不能提前安排它,或者我不想)。

我想做这样的事情:

def do_something():
    # do something

# setup and run reactor
factory = Factory()
factory.clients = []
factory.protocol = MyServer 
reactor.listenTCP(80, factory)
reactor.run() # asynchronously?

# clients connect...

reactor.callLater(0, do_something)

我尝试使用 python 线程,但没有成功。我看了these twisted examples但它们最后都有reactor.run()语句,这让我很失望。是的,我很可能错过了一些基本的东西(这就是我在这里的原因)。

最佳答案

您不需要更改运行 react 器的方式来实现此行为。

相反,只需认识到程序中的一切都是对某些事件的响应。

您什么时候发出“长周末快乐”通知?当然,当长周末即将开始时。换句话说,日历(只是一种特殊的计时设备)会生成一个事件,然后您对其使用react。您可以使用 IReactorTime.callLater 来实现此操作:计算下一个长周末之前的时间和 reactor.callLater(that_delay, some_function)

如果您想在用户单击按钮时执行某些操作,那就是对 GUI 库生成的事件的响应。如果您想在连接 USB 设备时执行某些操作,那就是对平台 HAL(或 DBUS 或 udev 等)生成的事件的响应。

任何时候,当你认为你“自行行动”时,想想它为什么会行动——在什么条件下或对什么情况作出 react ——你就会弄清楚事件 它实际上正在使用react。

关于python - 扭曲 - 交互地对函数进行排队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23714006/

相关文章:

javascript - 如何知道 AngularJS 中一长串的异步调用何时完成?

asynchronous - EJB 异步线程与 Vaadin,注入(inject)不工作(Vaadin 8、Vaadin-CDI、EJB ManagedExecutorService 线程)

python - 在 python 中从 TIMIT 数据库读取 WAV 文件

python - 将 ttk 笔记本选项卡设置在中心 [Python]

python - 如何为 Tkinter 文本小部件添加书签?

python 扭曲线程

python - 将 Heapy 的内存配置文件浏览器与 Twisted.web 一起使用

python - 为什么我的损失趋于下降,而我的准确度却趋于零?

javascript - 当所有事件完成时调用函数 Javascript

python - 有人可以帮我理解这个错误 :