У меня очень длинный список data
, давайте предположим, что это выглядит так:
[(a, a, 1),
(b, b, 1),
(c, c, 1),
(d, d, 1),
(e, e, 1),
(f, f, 1),
(g, g, 1),
(h, h, 1),
(i, i, 1),]
Я пытаюсь использовать многопоточность следующим образом:
from multiprocessing.dummy import Pool as ThreadPool
pool = ThreadPool(4)
pool.starmap(help_func, data)
Help_func выглядит следующим образом:
def help_func(in_vala, in_valb, in_valc):
print("asking for " + str(in_vala) + " asking for " + str(in_valb))
receiver(in_vala)
, а приемник - это простая тестовая функция:
def receiver(group):
print(group)
Когда я запускаю свою программу, я вижу, что вывод help_func является правильным, то есть он перечисляет значения data
.
Однако, когда я смотрю на значения, сгенерированные в приемнике (), я замечаю некоторые странные отпечатки, которые выглядят так:
a
b
c
de
e
f
gh
i
Я изо всех сил пытаюсь понять, почему это может иметь место. Есть что-то, что идет не так при вызове приемника, возможно, из-за приведения приемника неблокирование может быть?
Как мне обойти эту проблему.
Кроме того, когда я использую ThreadPool (1), я не вижу этой проблемы. Моя настоящая проблема имеет гораздо большую функцию, которая вызывается из help_func, поэтому я хотел бы в идеале запустить ее в нескольких потоках.