如何以“触发并忘记”的方式异步运行函数?

2024-06-02 07:01:02 发布

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

我有一个PythonKafka消费应用程序,我在其中消费消息,然后同步调用外部Web服务。Web服务需要一分钟来处理消息并发送响应

有没有一种方法可以在不等待响应的情况下使用消息、将请求发送到Web服务并使用下一条消息


from kafka import KafkaConsumer
from json import loads

consumer = KafkaConsumer(
    'spring_test',
     bootstrap_servers=['localhost:9092'],
     auto_offset_reset='earliest',
     enable_auto_commit=True,
     group_id='my-group',
     value_deserializer=lambda x: loads(x.decode('utf-8')));

这就是我等待消息并发送外部Web请求的方式


def consume_msgs():
 for message in consumer:
    message = message.value;
    send('{}'.format(message))

consume_msgs() 

函数send()需要一分钟才能得到响应。我想同时异步使用下一条消息,但我不知道从哪里开始

def send(pload) :
 import requests
 r = requests.post('someurl',data = pload)
 print(r)

Tags: fromimportsendweb消息messageautoconsumer
1条回答
网友
1楼 · 发布于 2024-06-02 07:01:02

不确定这是否是您所需要的,但您能将对send的每个调用旋转成一个线程吗?下面是这样的。这样,for循环将继续,而不必等待send返回。如果消耗数据的速度远远快于处理数据的速度,则可能必须以某种方式限制线程的数量

from threading import Thread  


def consume_msgs():
 for message in consumer:
    message = message.value;
    Thread(target=send, args = ('{}'.format(message),)).start()

consume_msgs() 

相关问题 更多 >