Python 中的简单多线程循环

克里斯

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

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()

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

诺斯洛

与线程相关的所有问题一样,要准确回答,了解测试的确切功能非常重要,例如,它们是使用 CPU 进行计算,还是使用网络。

Python 最常见的实现 (CPython) 具有全局解释器锁 (GIL),可防止线程并行运行 Python 代码。因此,如果您的测试是基于 CPU 的,则它们不能使用线程同时运行。你必须使用流程来做到这一点。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章