Python, выполняющий несколько задач

#python #multithreading #process #parallel-processing #multiprocessing

#python #многопоточность #процесс #параллельная обработка #многопроцессорность

Вопрос:

У меня есть конечная точка в моем API, которая фактически получает данные из разных источников данных, то, что я пытаюсь сделать, это отправить запрос сразу всем источникам данных и, как только я получу результат от once datasource, вернуть результат пользователю (по возможности завершить все оставшиеся запросы).

Какие хорошие библиотеки в python можно использовать? Любой пример был бы отличным подспорьем

Спасибо

Комментарии:

1. В чем здесь вопрос?

2. @Michal просто хотел узнать, какую библиотеку python мне следует использовать для достижения этой цели, я увидел, что многопроцессорная обработка не может понять, как мне вызвать несколько функций и получить ответ или просто дождаться первого ответа… Надеюсь, это дает вам представление о том, чего я пытаюсь достичь. Спасибо

Ответ №1:

Для этого вы можете использовать многопроцессорную библиотеку:

 from multiprocessing import Process, Queue
import time
q = Queue()

def some_func1(arg1, arg2, q):
    #this one will take longer, so we'll kill it after the other finishes
    time.sleep(20)
    q.put('some_func1 finished!')

def some_func2(arg1, arg2, q):
    q.put('some_func2 finished!')

proc1 = Process(target=some_func1,
                           args = ('arga', 'argb', q))
proc2 = Process(target=some_func2,
                           args = ('arg1', 'arg2', q))
proc1.start()
proc2.start()

#this will be the result from the first thread that finishes.
#At this point you can wait for the other threads or kill them, or whatever you want.
result = q.get()
print result
#if you want to kill all the procs now:
proc1.terminate()
proc2.terminate()
  

РЕДАКТИРОВАТЬ: Используйте очередь в многопроцессорной обработке для этого, поскольку это безопасно для процесса.

Комментарии:

1. Как бы вы тогда убедились, что первый ответ отменяет остальные?

2. @Eli это работает для того, что я пытался сделать… Спасибо