Доброго времени суток.
Есть код, который одновременно запускает несколько асинхронных процессов по списку. Нужно из каждого процесса получить результат, и обновить статус в базе. Пример кода:
from time import sleep
from multiprocessing import Process, Value
import subprocess
def worker_email(keyword, func_result):
subprocess.Popen(["python", "mongoworker.py", str(keyword)])
func_result.value = 1
return True
keywords_list = ['apple', 'banana', 'orange', 'strawberry']
if __name__ == '__main__':
for keyword in keywords_list:
# Выполняю задачу
func_result = Value('i', 0)
p = Process(target=worker_email, args=(keyword,func_result))
p.start()
# Обновляю статус задачи
if func_result.value == 1:
stream.update_one({'_id': doc['_id']}, {"$set": {"status": True}}, upsert=False)
В чем проблема: если использовать p.join(), то все работает, но процессы выполняются по очереди. Если не использовать, то процессы не закрываются, и статус не обновляется. Рабочий вариант - использовать p.join(), но выполнять не код функции, а subprocess.Popen, но это выглядит как-то нецензурно.
Собственно, буду рад любому совету :)