如何调用并发.使用一个使用两个参数的函数(一个是List参数,另一个不是List参数)



我已经构建了一个函数,我想在Python中利用一些多线程。这个函数有两个参数:一个List类型的参数(我利用了多线程)和一个不可迭代的变量。我编码的方式不工作,我不知道如何调用它

("ssns"变量将是ssn的列表,游标只是用于在SQL Server DB中写入的游标)。谢谢你!

def main(ssns):
t1 = time.perf_counter()
create_folders()
conn = pymssql.connect(db.server, db.user, db.password, db.db)
cursor = conn.cursor(as_dict=True)
with concurrent.futures.ThreadPoolExecutor() as executor:
results = executor.map(f.get_pdf_multi_thread, ssns, cursor)
conn.commit()
cursor.close()
conn.close()

如果我理解正确的话:

你有一个函数f.get_pdf_multi_thread,它有两个参数:一个ssn的List和一个cursor。您想调用f.get_pdf_multi_thread(ssns, cursor),使用ThreadPoolExecutor类实现异步性。

答:我想你要么:

(1)使用executor.submit而不是executor.map来接受多个参数,或者

(2)改变你的函数接受两个非可迭代对象,例如f.get_pdf_single(ssn, cursor),并在executor.map的调用中使用一个匿名(lambda)函数:

results = executor.map(lambda s, c: f.get_pdf_single(s, c), ssns)

方法executor.map实际上为您完成了对给定函数进行多次调用并将它们分布在线程之间的工作。传入的函数应该是一个接受一项的函数。可迭代对象的参数

最新更新