Python запуск функций в потоках
Есть список из 50 значений. Нужно запустить обработку каждых 10 значений в 5 отдельных потоках. Причём в каждую функцию помимо передачи 10 значений item нужно передать по 1 значению combat, которе берётся из файла (в файле 5 строк).
Как это сделать? Первое что пришло на ум — создать 5 функций, запускать потоки в зависимости от величины индекса items и передавать туда значения.
Я слабо понимаю в потоках, в глобальных переменных и передачи переменных в функции. Объясните пожалуйста как это можно сделать.
from threading import Thread
import io
items = ['id10010', 'nikolaevkos', 'id70406', 'id75157', 'id91704', 'id112841', 'fm1989', 'panarinn', 'sharoykin',
'id180771', 'androshkin', 'volynin', 'che1988', 'id298523', 'id299778', 'legalise', 'dm001', 'evgehuu',
'cherkas', 'inowyoung', 'id401309', 'pressplay', 'dmitryssh', 'id433779', 'id436076', 'id436998', 'yomananah',
'id451619', 'serb1589', 'id460010', 'id465818', 'id496477', 'id512701', 'massak_1981', 'andreihardy',
'mofo.pepper', 'id587481', 'alkrendelev', 'dima_vasenovich', 'yustas43', 'id664978', 'voldaev', 'kost1qq',
'id691602', 'id691719', 'vsbukin', 'toxemia', 'id715914', 'id726424', 'id726613']
item = ""
file = io.open("power.txt")
for i in file.readlines():
#всего 5 значений
combat = i
def main(item, combat):
for i, item in enumerate(items):
if i < 10:
th = Thread(target=foo_1)
th.start()
if i > 10 and i < 20:
foo_2(item)
th1 = Thread(target=foo_2)
th.start()
# и так 5 функций
def foo_1(item, combat):
for i in items:
print("foo_1", i, combat[0])
def foo_2(item, combat):
for i in items:
print("foo_2", i, combat[1])
#ещё 3 функции
main(item, combat)
Ответы (1 шт):
попробуйте так:
def main(item, combat):
file = io.open("power.txt")
combats = file.readlines()
for i in range(0, len(item), 10):
th = Thread(target = foo, args = (item[i:i + 10], combats[int(i / 10)]))
th.start()
def foo(item, combat):
for i in item:
print(i, combat)
args туда кладутся переменные которые будут передаваться в функцию foo
item[i:i + 10] мы берём срез
- с первого до десятого
- с десятого до двадцатого
- и т.д.
combats[int(i / 10)] мы делим число i на десять и превращаем в int
iравен0делим на10получаем0iравен10делим на10получаем1- и т.д.