【发布时间】:2012-10-16 15:18:22
【问题描述】:
我正在构建一个需要在主线程以外的线程上运行 TCP 服务器的应用程序。尝试运行以下代码时:
reactor.listenTCP(ServerConfiguration.tcpport, TcpCommandFactory())
reactor.run()
我收到以下错误
exceptions.ValueError: 信号只在主线程中起作用
我可以在主线程以外的线程上运行扭曲服务器吗?
【问题讨论】:
-
Twisted 本质上是非阻塞的。见*.com/questions/4263059/…
-
从我进行的测试来看,它确实阻塞了主线程,如果你在“reactor.run()”命令之前和之后放置一个打印消息,你会看到后面的消息永远不会打印。
-
reactor.run() 运行扭曲直到扭曲完成并关闭,然后在 reactor.run 之后的代码将运行。您可以将您的代码与扭曲的函数/回调集成,从而实现非阻塞。我选择放弃扭曲并使用 gevent 处理大多数事情。我听说 zeroMQ 也很棒。
-
如果您不熟悉异步编程,twisted tutorial 可能会有所帮助
-
您能解释一下为什么您决定需要线程吗? Twisted 中可能有一个 API 可以帮助您在没有线程的情况下实现目标。