так что я просто написал простой код с многопроцессорной, бассейн() и Queue(), и когда я выполнить его с этой командой он держит открытым навсегдапитон скрипт не выходя после использования многопроцессорных
python3 m.py
я могу видеть что 5 из моих ядер Cpu завершают работу, а использование процессора сокращается до нормального уровня, но не закрывает его, и я должен нажать Ctrl + c, чтобы выйти из него.
вот мой код:
from multiprocessing import Queue,Pool
import csv,json
from itertools import chain
def worker(line):
j_string = json.dumps(line)
worker.output_q.put(j_string)
def worker_init(output_q):
worker.output_q = output_q
f_open = open('khodro','rt')
f_csv = csv.reader(f_open)
output_q = Queue()
pool = Pool(5,worker_init,[output_q])
pool.imap(worker,chain(f_csv),1000)
raise SystemExit()
Вы используете окна? вам нужно добавить 'if __name __ ==" __ main __ "' перед созданием пула. –
im on ubuntu 16.04, я добавляю это, но сценарий просто закрывается без какой-либо обработки, почему мы должны писать это перед созданием пула? – ali
Вы ввели полный скрипт? 'imap' не блокирует, и вы отправили по сценарию 5 процессов, но родительский процесс немедленно завершает работу, а также завершает работу подпроцессов. Либо у вас есть 'join()' в конце, либо вы потребляете элементы 'для el в pool.imap', но скрипт, который вы вставили, не выполняет то, что вы описываете. – hansaplast