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