带I的Python多进程/

2024-04-18 16:29:33 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个连续运行的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)

谢谢


Tags: andthetoruntextapi消息here
1条回答
网友
1楼 · 发布于 2024-04-18 16:29:33

你应该试着找出“阻塞”到底是什么。异步的要点正是你想要的,避免在等待另一个任务时阻塞挂起的任务。在这里,多处理或多线程似乎不是解决问题的方法。对于这种用例,正确使用asyncio比任何多处理都要好一个数量级。如果有什么挂起,要么是您误用了asyncio(例如调用阻塞函数),要么是您受到消息队列的QoS限制(这可能是可配置的)。你知道吗

相关问题 更多 >