是否可以同时导出数据?

时间:2018-12-19 20:22:22

标签: python parallel-processing

我有一个执行以下步骤的Python程序:

  1. 查找特定文件夹中存在的.sql文件
  2. 使用所有.sql文件名创建列表
  3. 创建数据库连接
  4. 对步骤2中创建的列表中存在的每个文件名执行for循环。

    1. 读取.sql文件

    2. 对数据库执行.sql文件中提到的查询

    3. 将数据导出到文件中

    4. 对所有15个文件重复步骤4

这可以正常工作,并且符合预期。但是,每个文件都以串行方式导出(一个接一个)。有什么办法可以同时开始导出所有15个文件?

1 个答案:

答案 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文件的列表功能。