我已经构建了一个函数,我想在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
实际上为您完成了对给定函数进行多次调用并将它们分布在线程之间的工作。传入的函数应该是一个接受一项的函数。可迭代对象的参数