Больше современных потоков

#python #multithreading

#python #многопоточность

Вопрос:

Я пытаюсь запустить код с несколькими потоками, пользователь может решить, сколько потоков он хочет запустить. Я попытался сделать это с помощью модуля threading в Python 3.7

Мой код показан ниже, но моя проблема в том, что вместо того, чтобы запускать все потоки вместе, он выполняется один за другим…

 import threading

x=int(input("Enter number of threads: "))

def main():
   print("My main function")
   print("Does some stuff...")
while x > 0:
    print("Starting Threads.")
    x=x-1       #At every time the while loops gets passed, x gets decremented, so once it hits 0 it stops

    t1=threading.Thread(target=main) #for every time the loop passes, a new thread gets created
    t1.start() #and the thread starts here
  

Теперь мне нужно выяснить, как я могу сделать так, чтобы они выполнялись одновременно, а не один за другим. Спасибо

Ответ №1:

ваш код выполняется параллельно (примечание: только на одном ядре; это ограничение python из-за глобальной блокировки интерпретатора).

чтобы сделать это более очевидным, немного измените свою основную функцию; в том виде, в каком она есть сейчас, она просто завершается слишком быстро. я предлагаю:

 from time import sleep
from random import random

def main():
   print("main starting")
   sleep(random())
   print("main done")
  

это выведет что-то вроде

 Enter number of threads: 4
Starting Threads.
main starting
Starting Threads.
main starting
Starting Threads.
main starting
Starting Threads.
main starting
main done
main done
main done
main done