#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