我有一个执行以下步骤的Python程序:
.sql
文件名创建列表对步骤2中创建的列表中存在的每个文件名执行for
循环。
读取.sql文件
对数据库执行.sql文件中提到的查询
将数据导出到文件中
对所有15个文件重复步骤4
这可以正常工作,并且符合预期。但是,每个文件都以串行方式导出(一个接一个)。有什么办法可以同时开始导出所有15个文件?
答案 0 :(得分:0)
是的,您实际上可以并行调用所有15个文件。这是一个例子。我在函数上使用不同参数调用了4次请求。
from concurrent.futures import ThreadPoolExecutor
import random,time
from bs4 import BeautifulSoup as bs
import requests
URL = 'http://quotesondesign.com/wp-json/posts'
def quote_stream():
'''
Quoter streamer
'''
param = dict(page=random.randint(1, 1000))
quo = requests.get(URL, params=param)
if quo.ok:
data = quo.json()
author = data[0]['title'].strip()
content = bs(data[0]['content'], 'html5lib').text.strip()
print(f'{content}\n-{author}\n')
else:
print('Connection Issues :(')
def multi_qouter(workers=4):
with ThreadPoolExecutor(max_workers=workers) as executor:
_ = [executor.submit(quote_stream) for i in range(workers)]
if __name__ == '__main__':
now = time.time()
multi_qouter(workers=4)
print(f'Time taken {time.time()-now:.2f} seconds')
重点是创建一个从头到尾运行一个文件的函数(quote_stream)。然后使用不同线程(multi_qouter)中的不同文件调用该函数。对于将参数作为参数的函数,只需将其放置在[executor.submit(quote_stream,file)中文件中的文件]并设置max_workers = len(files),其中files是要在其中传递的sql文件的列表功能。