Созданные многопроцессорные процессы не работают - PullRequest
0 голосов
/ 17 июня 2020

У меня есть файл csv с тысячами строк, который я использую для вызова API для создания пользователя. Скрипт действительно порождает новые процессы, но эти процессы простаивают, пока основной поток выполняет всю работу.

Вот что я пробовал:

from multiprocessing import Pool
from multiprocessing import set_start_method
import multiprocessing
import requests
import csv
from csv import writer

set_start_method("spawn", force=True)

def create_user(multi_csv):
    for row in multi_csv:
        csv_email = row[0]
        csv_first_name = row[1]
        csv_last_name = row[3]
        create_data = "{\"email\":\"" + csv_email + "\",\"firstName\":\"" + csv_first_name + "\",\"lastName\":\"" + csv_last_name + "\"}}"
        r = requests.post("https://url.com", data=create_data, headers={"Authorization":"authinfo"})

        print(str(csv_email))


if __name__ == '__main__':
    with open("csv.csv", newline='') as csvfile:
        multi_csv = list(csv.reader(csvfile))

    with Pool(4) as pool:
        pool.apply_async(create_user(multi_csv))

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Я полагаю, у вас проблема с вызовом apply_asyn c.

Попробуйте изменить последнюю строку на:

pool.apply_async(create_user, (multi_csv,))

Кортеж для arg c очень импортирован → docs .

Вы не передаете функцию apply_async, вы передаете только возвращаемое значение. Таким образом, вы должны предоставить действующий обратный вызов, который apply_async может вызвать по запросу.

Если это не решит проблему, предоставьте некоторые тестовые данные.

0 голосов
/ 17 июня 2020

вы вызываете create_user со списком один раз, и я считаю, что проблема в этом. Я бы попытался запустить его, как в примере документации в Documentation - Introduction

From

with Pool(4) as pool:
    pool.apply_async(create_user(multi_csv))

Я бы попытался назвать это так:

with Pool(4) as pool:
    pool.map(create_user, multi_csv)

или используйте apply_asyn c, но не используйте список в качестве параметра для функции:

with Pool(4) as pool:
    pool.apply_async(create_user, multi_csv)
...