【问题标题】:Using parallel method instead of sequential loop使用并行方法而不是顺序循环
【发布时间】:2021-08-10 09:49:02
【问题描述】:

我的代码已经使用了循环,我想用多线程替换循环,但不明白该怎么做。下面是代码。

def run_test_function(arg1,arg2, arg3, arg4, arg5):
   try:
      #loop1
      for x in arg1:
         #loop2
         for y in arg2:
            #loop3
            for z in range(len(arg3)):
               #statements
            #statements
         #statements
   except Exception as e:
      print(e)
def main(argv):
   arg1 = value1
   arg2 = value2
   arg3 = value3
   arg4 = value4
   run_test_function(arg1, arg2, arg3, arg4)

我希望 loop1 的每次迭代都应该表现为一个线程,这样我就可以用多线程替换循环。感谢并提前感谢您的帮助。 :)

【问题讨论】:

  • 这完全取决于statements 是什么
  • 语句就像一些 kubectl 命令并处理它们的输出并验证输出。假设语句就像打印两个循环的 x n y。

标签: python-3.x multithreading concurrency python-multiprocessing


【解决方案1】:

并行打印xy(正如您在评论中所说):

from itertools import product
from multiprocessing import Pool


def run_test_function(arg1, arg2):
    with Pool(4) as pool:
        pool.starmap(print, product(arg1, arg2), 5)

if __name__ == '__main__':
    run_test_function([1,2,3,4,5], "abc")

输出:

~/test $ python so.py
1 a
1 b
1 c
2 a
2 b
2 c
3 a
3 b
3 c
4 a
4 b
4 c
5 a
5 b
5 c
6 a
6 b
6 c
7 a
7 b
7 c

【讨论】:

  • 我很抱歉,但无法理解如何为我的代码实现它。我已经编辑了我的问题,请您查看一下,看看我的代码到底发生了什么。
  • 如果arg3arg4是常量,可以传递一个lambda函数:pool.map(lambda x, y: processing_function(x, y, arg3, arg4), product(arg1, arg2))
  • product 和 Pool(4) 的功能是什么,根据您的说法,我需要将语句放在不同的函数中,并且必须在 run_test_function 中调用该函数?
  • productPool(4) 的功能是什么” - 您可以在答案中的代码后面找到指向文档的链接。 “我需要将语句放在不同的函数中,并且必须在 run_test_function 中调用该函数?” - 是的
  • 谢谢你,你清除了很多,还有一个问题,如果有一个嵌套循环作为 loop3 和 loop3 就像 for x in range(len(arg3)) 怎么办?我已经相应地编辑了我的问题。
猜你喜欢
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 2019-02-07
相关资源
最近更新 更多