如何执行asyncio传输对象的同步*读写 *** 作

如何执行asyncio传输对象的同步*读写 *** 作,第1张

概述如何执行asyncio传输对象同步*读/写 *** 作

我在windows上使用asyncio并引用了一个命名pipe道的传输对象

class DatAPIpeHandler(asyncio.Protocol): def connection_made(self,trans): self.trans = trans # <<== this is a reference to a transport object of type _ProactorDuplexPipeTransport loop = asyncio.get_event_loop() server = loop.start_serving_pipe(lambda: DatAPIpeHandler(),r'\.pipetest-pipe')

现在我想使用self.trans来同步写入,然后从命名pipe道读取数据。 我怎样才能做到这一点?

它对我来说同样重要,因为这是一种RPC调用我正在使用pipe道(写东西,并迅速获得响应),我想要阻止偶循环的所有其他活动,直到这个“pipe道RPC调用“回报。 如果我不阻止事件循环的所有其他活动,直到这个RPC调用完成,我将有不需要的副作用,因为循环将继续处理其他我不想处理的事件。

我想要做的事(写入pipe道然后读取)与从事件中urllib2.urlopen(urllib2.Request('http://www.Google.com')).read()人非常相似循环线程 – 在这里,所有的事件循环活动都将被阻塞,直到我们从远程http服务器获得响应。

在windows上寻找轻量级PHP堆栈进行开发

ipithon笔记本无法正常工作

如何将std :: string值传递给C ++中的RegSetValueEx()

什么导致PHPlocking文件

有一个相当于LPTSTR的string吗?

我知道我可以调用self.trans.write(数据),但是这不会同步写入数据(据我所知它不会阻止)

谢谢。

编辑:在第一个评论之后,让我补充:

我知道我不应该阻止事件循环,我可以使用同步原语来完成我想要的。 但是让我们说你有事件循环,并行执行10个不同的活动,其中一个正在做某种RPC(如上所述),其他9个活动应该被阻塞,直到完成这个RPC。 所以我有两个select:

(1)像你所build议的那样向所有这10个活动添加同步原语(locking/信号量/条件)以便同步它们。

(2)通过阻塞写入然后阻塞读取/写入pipe道来实现这个RPC。 (假设我相信pipe道的另一端)

我知道这不是使用事件循环的常用方式,但在我的具体情况下,我认为(2)更好。 (更简单的逻辑)

用fileStream和file_FLAG_NO_BUFFERING读取文件

windows服务程序中的退出function的影响

C#不承认SafetokenHandle

远东语言文本不在windows Compact 7中绘制

在任务pipe理器的应用程序标签中设置应用程序

我认为你必须使用线程同步原语来确保整个循环(当前线程)被阻塞。 我认为最好的报价是使用线程队列和连接功能。

@Andrew svetlov

正如你所说, asyncio同步基元是正常的选择。

但是如何将事件循环协程打包并公开为同步函数API是我的问题。 我不希望API消费者处理asyncio概念

更新:找到了很酷的答案: 我如何在事件循环中打包协程作为正常的函数? 。

总结

以上是内存溢出为你收集整理的如何执行asyncio传输对象的同步*读/写 *** 作全部内容,希望文章能够帮你解决如何执行asyncio传输对象的同步*读/写 *** 作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1294304.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存