Python中的简单多线程循环

时间:2018-04-18 19:40:40

标签: python multithreading

我有一个功能循环,对每个元素列表运行一系列顺序测试。不幸的是,这个列表正在快速增长,测试的数量也在增长,我想看看我是否可以添加线程,以便它可以同时对几个不同的元素执行测试。测试本身必须按顺序运行,因为每个测试可能依赖于测试返回的先前数据来执行下一个数据,但每个元素都是独立的,不需要来自另一个元素的数据。只有在每个元素完成后才需要对整个数据集进行处理。

def do_some_tests_on_a_list_of_elements(element_list):
    do_some_stuff_here_to_set_up()

    for index, element in enumerate(element_list, start=1):
        element = do_some_stuff_on_element(index, element) 

    do_some_stuff_after_each_element_has_finished()

例如,在此代码中,我想进行设置,然后允许循环通过线程一次处理多个元素,然后在完成所有元素之后,对数据集执行最后一步。实现这一目标的最简单机制是什么?

1 个答案:

答案 0 :(得分:3)

与所有线程问题一样,要准确回答,了解测试的确切内容非常重要,例如,如果他们使用CPU来计算某些内容,或者他们是否在使用网络。

Python最常见的实现(CPython)有一个全局解释器锁(GIL),可防止线程并行运行python代码。因此,如果您的测试是基于CPU的,则它们无法使用线程同时运行。你必须使用进程来完成它。

另一方面,如果您的测试是基于IO的(等待网络数据包),那么您可以使用线程,但最好只使用异步请求。你没有需要额外的线程来等待网络,你不能等待。

相关问题