Библиотека потоков Python: код выполняется линейно, а не параллельно

#python #python-3.x #multiprocessing #python-multithreading

Вопрос:

Я хочу запустить два потока параллельно (на python3.6), что работает для следующего примера кода:

 import threading
from time import sleep

# use Thread to run def in background
# Example:
def func1():
    while True:
        sleep(1)
        print("Working")

def func2():
    while True:
        sleep(2)
        print("Working2")


Thread(target = func1).start()
Thread(target = func2).start()
 

но это не работает для нарезания резьбы.Нитки:

 import threading
from time import sleep
# use Thread to run def in background
# Example:
def func1():
    while True:
        sleep(1)
        print("Working")

def func2():
    while True:
        sleep(2)
        print("Working2")


x = threading.Thread(target=func1())
y = threading.Thread(target=func2())
x.start()
y.start()
 

Я хотел бы использовать последний вариант, чтобы проверить, живы ли еще x или y.

Ответ №1:

Есть разница между Thread(target = func1) (первым кодом) и Thread(target=func1()) (вторым кодом):

  • первый передает объект функции в Thread
  • второй выполняет функцию (потому что вы вызвали ее с func1() помощью ) и передает ее возвращаемое значение в Thread

Поскольку вы хотите, чтобы потоки вызывали ваши функции, не вызывайте их:

 x = threading.Thread(target=func1)
y = threading.Thread(target=func2)
x.start()
y.start()