Python Multiproccess with I/O



所以我有一个连续运行的python脚本,可以发送消息。它获取消息的内容并在几个 API 上运行搜索,然后回复该搜索的结果。目前我正在使用 async/await,到目前为止它正在工作,但发生的情况是,如果它在已经在处理一条消息时收到一条消息,它将等到它完成当前正在搜索的消息后再开始它收到的消息。

我希望对其进行设置,以便它可以一次处理多条消息,因为大多数等待都在等待 API 响应。我应该在这里使用多处理吗,如果是这样,我有没有办法让多处理函数处于空闲状态,直到添加消息,然后将该消息发送到多处理函数。似乎我应该使用队列,但大多数文档都说一旦没有更多工作,队列就会关闭。必要的一件事是,如果我有特定数量的进程在工作(例如 4 个进程(并且我有>4 条消息,它会存储额外的消息,并将它们添加到释放的下一个进程中。

像这样的东西:(非常糟糕的伪代码(

def runOnMessageReceive(message)
<run a regex here and extract the text i want to search for>
addToSearchQueue(text)
def addToSearchQueue(text)
<here is where it would add it to the waiting queue and run it when it has an 
open process>
process.run(searchAndPrint(text))
def searchAndPrint(info):
reply = Module.searchOnlineAPI(info)
Module.replyToMessage(reply)

谢谢

你应该尝试找到"阻塞"的确切内容。asyncio 的要点正是您想要的,避免在等待另一个任务时阻止待处理的任务。多处理或多线程似乎不是这里要走的路。对于这种用例,正确使用 asyncio 将比任何多处理好一个数量级。如果有任何挂起,要么您滥用了 asyncio(例如调用阻塞函数(,要么您受到消息队列 QoS 的限制(可能是可配置的(。

相关内容

  • 没有找到相关文章

最新更新