Запуск 3 разных функций с аргументами одновременно - PullRequest
0 голосов
/ 31 октября 2019

Я хотел бы запустить 3 разные функции одновременно на машине с несколькими ядрами. Каждая функция запускает обширный запрос данных для разделения баз данных, используя один и тот же модуль (cx_Oracle), и каждая функция вызывается с некоторыми аргументами. Как это можно сделать?

Я прочитал немного о параллельных вычислениях с Python, но ProcessPoolExecutor всегда возвращает ошибку BrokenProcessPool. Сценарий сохранен (сообщается как проблема в другом элементе SE).

if __name__ == '__main__'
    with ProcessPoolExecutor(3) as executor:
        future_1 = executor.submit(query_1, arg1)
        future_2 = executor.submit(query_2, arg2)
        future_3 = executor.submit(query_3, arg3)
    result_1 = future_1.result()
    result_2 = future_2.result()
    result_3 = future_3.result()

BrokenProcessPool: A process in the process pool was terminated abruptly while the future was running or pending.

Вы видели нечто подобное? Мне достаточно ссылки на другой поток или пример трех разных вызовов с аргументами. Я также пробовал многопроцессорную работу, но не успешно.

1 Ответ

0 голосов
/ 01 ноября 2019

Пример cx_Oracle Threads.py показывает выполнение двух операторов в разных потоках:

. . .
def TheLongQuery():
     . . .

def DoALock():
    . . .


thread1 = threading.Thread(None, TheLongQuery)
thread1.start()

thread2 = threading.Thread(None, DoALock)
thread2.start()

thread1.join()
thread2.join()
...