многопроцессорная обработка 1 потока за раз x количество раз - PullRequest
1 голос
/ 27 сентября 2019

Я использую многопроцессорность для проекта, который включает переход на URL.Я заметил, что всякий раз, когда я использую pool.imap_unordered(), каким бы ни был мой итератор (скажем, это список с номерами 1 и 2, которые являются 2 числами), он будет запускать программу один раз с одним потоком, тогда, поскольку есть 2 числав списке он будет запущен в другой раз.Я не могу понять это.Я думал, что понял, что все должно делать.(нет, он не работает быстрее независимо от того, сколько у меня потоков) (args.urls изначально был файлом, тогда я конвертирую все содержимое файла в список) все работало нормально, пока я не добавил многопроцессорность, поэтому я знаю,это не могло быть ошибкой в ​​моем коде, не связанном с многопроцессорностью.

from   multiprocessing import Pool
import multiprocessing
import requests

arrange = [ lines.replace("\n", "") for lines in #file ]

def check():
    for lines in arrange:
        requests.get(lines)

def main():
    pool = ThreadPool(4)
    results = pool.imap_unordered(check, arrange)

1 Ответ

1 голос
/ 27 сентября 2019

Так что я не совсем уверен, что вы пытаетесь сделать, но, возможно, это то, что вам нужно:

from   multiprocessing import ThreadPool 
import multiprocessing
import requests

arrange = [ line.replace("\n", "") for line in #file ]


def check(line):
    requests.get(line) # remove the loop, since you are using multiprocessing this is not needed as you pass only one of the lines per thread. 


def main():
    pool = ThreadPool(4)
    results = pool.imap_unordered(check, arrange) #  This loops through arrange and provides the check function a single line per call
...