Python запускает потоки последовательно

1

Я экспериментирую с запущенным кодом, параллельным в Python.

Мой вариант использования следующий: у меня есть процесс, который мне нужно запускать тысячи раз. Но из-за этого зависимости от загрузки мне нужно быть осторожным, сколько я запускаю в одно и то же время (у меня ограниченное количество запросов каждую минуту). Поэтому я хотел бы всегда запускать функцию 10 раз одновременно, каждый раз, когда вы закончите, я хотел бы запустить новый процесс.

После некоторого быстрого считывания модуль потоковой передачи, похоже, является тем, что я ищу. Однако некоторые небольшие эксперименты, похоже, показывают, что Python не запускает потоки в паралелле.

Когда я запускаю следующий код

import threading
import time

wait = 0.4

def f(x):
 for j in range(1,100):
    time.sleep(wait)
    print(x)


threading.Thread(target = f(1)).start()
threading.Thread(target = f(2)).start()

Я попадаю в командную строку

1
1
1
1
1

Не один сингл 2 показывается до тех пор, пока не будут распечатаны все 100.

Как это происходит? Теоретически f (1) и f (2) должны одновременно работать одновременно?

  • 1
    Вы вызываете функции при создании потоков. Классический дупе
  • 1
    Также обратите внимание: range(1, 100) будет печататься 99 раз, а не 100; второе число - предел, на котором это останавливается прежде.
Теги:
python-multithreading

1 ответ

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

Эта строка

threading.Thread(target = f(1)).start()

в основном говорит: "Запустите новый поток и выполните результат f (1) в нем".

Вы хотите "начать новый поток и выполнить f с аргументом 1 в нем", что переводит

threading.Thread(target = f, args=(1,)).start()
  • 0
    Также обратите внимание, что f(1) возвращает None , что является допустимой targettarget - это вызываемый объект, который вызывается методом run() . По умолчанию None , то есть ничего не вызывается. » - выделено мое)

Ещё вопросы

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