首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Twisted Python实现多种通信渠道

使用Twisted Python实现多种通信渠道
EN

Stack Overflow用户
提问于 2010-10-18 21:53:04
回答 1查看 765关注 0票数 2

我目前正在研究Twisted框架,将其作为实现基于网络的备份应用程序的一种方式,我希望实现一些我在网上找不到的示例。

我计划使用Perspective Broker实现该系统,但我还需要一种将二进制文件从客户端传输到服务器的方法。我希望能够在PB上调用一个方法,然后使用某种UID通过单独的数据通道发送文件。

之所以有这两个独立的通信通道,是因为我想让客户机成为多线程的(一个线程扫描目录树,而另一个线程将更改后的文件传输到服务器)。

使用Twisted可以做到这一点吗?我读到过,让多个线程在一个反应器上调用方法是个坏消息,那么这个架构注定要失败吗?

我很感激任何正确方向的指点,正如我提到的,我仍然在研究可能性-但我计划在这个项目中使用Django,所以Python是必须的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-18 22:42:24

之所以有这两个独立的通信通道,是因为我想让客户机成为多线程的(一个线程扫描目录树,而另一个线程将更改后的文件传输到服务器)。

这种推理是不成立的。您可以使用在单个套接字上运行的单个协议,即使您有一个线程在文件系统中寻找要做的工作。

不过,可能还有其他原因,需要以不同方式发送文件数据,而不是在客户端和服务器之间发送元数据或其他结构化数据。但是,我想到的主要问题是,您可能不想强制命令等待文件完成,PB的FilePager类缓解了这个问题。

如果您要在使用扭曲的应用程序中使用线程,请记住的主要内容是,无论何时您想要从任何线程“除了”运行反应器的线程调用Twisted API时,您都必须使用reactor.callFromThread (或仅基于该方法构建的API,如twisted.internet.threads.blockingCallFromThread)。

callFromThread将一些工作(以要调用的对象的形式)发送到反应器线程,在那里反应器将安排“很快”调用它。您从错误的线程调用的任何其他Twisted API都将具有未定义的结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3959863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档