我有一个包含 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_async调用有问题。
尝试将最后一行更改为:
pool.apply_async(create_user, (multi_csv,))
argc 的元组非常导入→文档。
您没有将函数传递给apply_async
而只是传递返回值。因此,您必须提供有效的回调,apply_async
可以按需调用该回调。
如果不能解决问题,请提供一些测试数据。
你用列表称create_user一次,我相信这就是问题所在。我会尝试按照文档 - 简介中的文档示例运行它
从
with Pool(4) as pool:
pool.apply_async(create_user(multi_csv))
我会尝试这样称呼它:
with Pool(4) as pool:
pool.map(create_user, multi_csv)
或使用apply_async,但不要使用列表作为函数的参数:
with Pool(4) as pool:
pool.apply_async(create_user, multi_csv)