在 Python 中动态创建函数和线程

V_i*_*_er 4 python multithreading python-2.7

我有一个充满命令的数组,我想同时执行所有命令。

到目前为止,我有:

import threading

...

def MyThread0():
    exec commandArray[0]

def MyThread1():
    exec commandArray[1]

t1 = threading.Thread(target=MyThread0(), args=[]).start()
t2 = threading.Thread(target=MyThread1(), args=[]).start()
Run Code Online (Sandbox Code Playgroud)

如果只有两个线程,这可能仍然可以接受(至少它似乎可以工作),但如果 commandArray 的长度在运行时未知,则肯定不是。我如何有效地为 x 个线程执行此操作?

PS:这完全有可能是垃圾,因为我是多线程的新手。建设性的批评受到高度赞赏。

fik*_*r4n 6

如果我正确理解你的问题,它应该是这样的:

    import threading

    ...
    command_array = ...
    number_of_commands = len(command_array)
    ...

    def run_the_command(index):
        exec command_array[index]

    threads = []
    for i in range(number_of_commands):    
        t = threading.Thread(target=run_the_command, args=(i,))
        t.start()
        threads.append(t)
Run Code Online (Sandbox Code Playgroud)

注意:

  1. Passrun_it_boy而不是run_it_boy(),因为你现在不想调用它,而是让线程模块来做。
  2. 鼓励使用snake_case函数/方法名和变量名,CamelCase用于类名。

选择

在我看来,最好使用称为线程池的东西。