Можно ли одновременно экспортировать данные? - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть программа на Python, которая выполняет следующие шаги:

  1. Поиск файла .sql, присутствующего в определенной папке
  2. Создание списка со всеми .sql именем файла
  3. Создать соединение с базой данных
  4. Выполнить цикл for для каждого имени файла, присутствующего в списке, созданном на шаге 2.

    1. Считать файл .sql

    2. Выполнить запрос, указанный в файле .sql, к базе данных

    3. Экспорт данных в файл

    4. Повторшаг 4 для всех 15 файлов

Это работает нормально и, как и ожидалось.Однако каждый файл экспортируется последовательно (один за другим).Можно ли начать экспортировать все 15 файлов одновременно?

1 Ответ

0 голосов
/ 20 декабря 2018

Да, вы можете назвать все 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, которые нужно передать в этот файл.функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...