tqdm и несколько многопроцессорных очередей

Я пытался разобрать строку загрузки для цикла разбора, который я сделал, но потому что я уже использую multiprocessing.queue Я не смог найти способ сделать tqdm сотрудничать с моим кодом. Вот что у меня есть.

def get_chunks(input_list,chunk_size):
    return [input_list[i:i+chunk_size] for i in range(0, len(input_list), chunk_size)]


def job(chunk, q):
    for item in chunk:
        for t in find_all(item):
        q.put(t)

def find_all(item):
    time.sleep(2) #yield info IF found

def output(q):  
    while True:
    info = q.get()
    if info is None:
        return
    with open('file.txt','a') as f:
        f.write(info)

if __name__ == '__main__':
    chunks = get_chunks(all_urls, 5)
    q = mp.Queue()
    processes = [mp.Process(target=job, args=(chunk,q)) for chunk in chunks]        
    for p in processes: 
        p.start()
    sink = mp.Process(target=output, args=(q,))
    sink.start()
    for p in processes:
        p.join()
    q.put(0)
    sink.join() 

Я видел примеры многопроцессорной обработки tqdm, но ни один, где существующий код также не использует queue, Как мне обновлять панель загрузки каждый раз, когда запускается find_all?

0 ответов

Другие вопросы по тегам