Python异步与基于线程的生产者/消费者Pipelin

2024-09-30 22:10:57 发布

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

我想创建一个类似这样的管道:

HttpGetHtmlFromA --|                                         
                   |--> ExtractComments --> ExtractKeywords --> NotifyOverHttp
HttpGetJsonFromB --|                                       

在这方面,我有两种不同的方法,我很想知道哪种方法最适合这项任务。在

第一种方法是利用线程,上面的每一个操作(即gethtmlproma、GetJsonFromB、ExtractComments等)都在各自独立的线程上运行。为了传递数据,管道的每个集成点之间将有三个不同的队列。在

我心目中的后一种方法将以异步方式执行所有操作。上面的操作将被表示为单独的任务,每个任务在异步事件循环中无限期地运行。数据仍将通过队列传递。在

虽然我倾向于异步设计,但我不确定什么是最有效的。请注意,httpgethtmlproma和HttpGetJsonFromB是轮询url的生产者。在执行各自的http请求后,它们将延迟约10秒,然后再发出后续的http请求。这似乎很适合异步模型,因为它允许在轮询之间进行一些工作。也就是说,ExtractComments和ExtractKeywords有可能是长时间运行(主要是)CPU限制的任务,用于解析传入的内容。在

不管怎样,我很想听听你对这件事的看法:线程与协同程序。有没有一种我没有考虑过的完全不同的方法?在


Tags: 方法http利用管道队列线程心目传递数据