Я экспериментирую с запущенным кодом, параллельным в 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) должны одновременно работать одновременно?
Эта строка
threading.Thread(target = f(1)).start()
в основном говорит: "Запустите новый поток и выполните результат f (1) в нем".
Вы хотите "начать новый поток и выполнить f с аргументом 1 в нем", что переводит
threading.Thread(target = f, args=(1,)).start()
f(1)
возвращает None
, что является допустимой target
(« target
- это вызываемый объект, который вызывается методом run()
. По умолчанию None
, то есть ничего не вызывается. » - выделено мое)
range(1, 100)
будет печататься 99 раз, а не 100; второе число - предел, на котором это останавливается прежде.