【发布时间】:2016-05-06 14:45:48
【问题描述】:
我必须进行可能需要很长时间(超过 60 秒)的远程呼叫。我们的整个代码依赖于处理 callRemote 的返回值,所以这很糟糕,因为尽管使用了 twqisted + 50 个工作线程运行,但我们一直在阻塞 IO。
我们目前使用类似的东西
result = threads.blockingCallFromThread(reactor, callRemote, "method", args)
然后得到结果/继续,但正如它的名字所说,它阻塞了事件循环,所以我们不能同时等待多个结果。
我无法重构整个代码以使其异步,所以我认为唯一的方法是将长 IO 任务推迟到线程。
我正在尝试在线程中进行远程调用,但我找不到从阻塞调用返回结果的方法。进行了 remoteCalls,结果在某个地方,但我无法抓住它。
我目前正在尝试做的事情看起来像
reactor.callInThread(callRemote, name, *args, **kw)
它返回一个空的 Deferred(为什么?)。
我正在尝试将结果放入某种队列中,但它不起作用。我该怎么做?
【问题讨论】:
标签: python multithreading asynchronous twisted