Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 衍生的多处理进程不是';我不做任何工作_Python_Multiprocessing - Fatal编程技术网

Python 衍生的多处理进程不是';我不做任何工作

Python 衍生的多处理进程不是';我不做任何工作,python,multiprocessing,Python,Multiprocessing,我有一个包含1000行的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(

我有一个包含1000行的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))

我假设您对apply\u异步调用有问题

尝试将最后一行更改为:

pool.apply_async(create_user, (multi_csv,))
argc的元组非常重要→ .

您没有将函数传递给
apply\u async
您只是传递返回值。因此,您必须提供一个有效的回调,
apply\u async
可以按需调用


如果它不能解决问题,请提供一些测试数据。

您调用create\u user with list一次,我相信这就是问题所在。我会试着像中的文档示例那样运行它

我试着这样称呼它:

with Pool(4) as pool:
    pool.map(create_user, multi_csv)
或使用apply_async,但不要将list用作函数的参数:

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

您传递的不是回调,而是已执行的函数。现在不要调用create_usern,您正在尝试将所有工作从主进程移动到单个工作进程。因此,您所要做的就是增加进程间通信开销,将列表发送给工作者,然后返回最后的字符串,而不实际并行任何内容。如果这里的瓶颈是
请求.post
调用,那么您应该将每个请求分成一个工作线程池(而不是进程,因为请求调用可能是I/O绑定的),而不是在单个工作进程中处理整个CSV文件,然后按顺序发送每个请求。```将池(4)作为池:pool.map(创建用户,多csv)``这是为我做的,谢谢
with Pool(4) as pool:
    pool.apply_async(create_user, multi_csv)