如何在Python中动态创建多个线程

时间:2019-04-05 06:19:30

标签: python multithreading dynamic

我正在创建一个python代码,该代码具有应按用户要求使用线程的次数运行的功能。例如:

import time
T = input("Enter the number of times the function should be executed")
L = [1,2,3,4]

def sum(Num):
    for n in Num:
        time.sleep(0.2)
        print("square:",n*n)

基于用户的T值,我想动态创建T个线程,并在单独的线程中执行sum函数。

如果用户输入为4,那么我需要动态创建4个线程并使用4个不同的线程执行相同的功能。 请帮我创建4个多线程。谢谢!

2 个答案:

答案 0 :(得分:0)

这取决于您的需要,您有几种方法可以做。这是两个适合您情况的示例

带有线程模块

如果要创建N线程并等待它们结束。您应该使用threading模块并导入Thread

from threading import Thread

# Start all threads. 
threads = []
for n in range(T):
    t = Thread(target=sum, args=(L,))
    t.start()
    threads.append(t)

# Wait all threads to finish.
for t in threads:
    t.join()

带有线程模块

否则,如果您不想等待。我强烈建议您使用thread模块(自Python3起改名为_thread

from _thread import start_new_thread

# Start all threads and ignore exit.
for n in range(T):
    start_new_thread(sum, (L,))

(args,)是一个元组。这就是L处于括号中的原因。

答案 1 :(得分:0)

S UПΣYΛ答案很好地解释了如何使用多线程,但没有考虑用户输入,根据您的问题,用户输入定义了线程数。基于此,您可以尝试:

import threading, time

def _sum(n):
    time.sleep(0.2)
    print(f"square: {n*n}")

while 1:

    t = input("Enter the number of times the function should be executed:\n").strip()
    try:
        max_threads = int(t)
        for n in range(0, max_threads):
            threading.Thread(target=_sum, args=[n]).start()
    except:
        pass
        print("Please type only digits (0-9)")
        continue

    print(f"Started {max_threads} threads.")

    # wait threads to finish
    while threading.active_count() > 1:
        time.sleep(0.5)

    t = input("Create another batch (y/n)?\n").lower().strip() #
    if t != "y":
        print("Exiting.")
        break

注意:

  1. 避免创建与内置函数同名的函数,例如sum(),请使用 _sum()或类似名称;
  2. Python是大小写,这意味着Def def不同For也是如此/ for;
  3. 用单引号'或双引号将字符串括起来 "
  4. Live Demo-Python 3.6;
  5. Asciinema video