Python Threading. Почему потоки блокируют друг друга? [Дубликат]

1
import threading
import time

def someMethod(x):
    time.sleep(20)
    print(x);

def someMethod2(x):
    time.sleep(1)
    print(x);

t1 = threading.Thread(name="t1", target=someMethod(1));
t2 = threading.Thread(name="t2", target=someMethod2(2));

t1.start();
t2.start();

Я ожидаю, что результат будет равен 2, а 1, а затем 1, а затем 2. Общее время составляет 21 секунду. Как я могу заставить его работать параллельно, поэтому на выходе 2, а затем на 1, и оба потока работают параллельно, так что общее время составляет 20 единиц?

Теги:

1 ответ

7
Лучший ответ

Вы вызвали функции в основном потоке и передали их возвращаемые значения в качестве точки ввода потока (так как оба они вернули None, это означало точку ввода no-op), вы фактически не запускали их в отдельных потоках. Вы также дважды вызывали someMethod и никогда не вызывали someMethod2. Чтобы исправить, измените на:

t1 = threading.Thread(name="t1", target=someMethod, args=(1,))
t2 = threading.Thread(name="t2", target=someMethod2, args=(2,))

который надлежащим образом передает ссылки на сами функции в качестве точек входа с аргументами, которые должны использоваться, откладывая выполнение до тех пор, пока поток не будет запущен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню