다중 처리를 사용하여 백그라운드 비동기 함수를 여러 개 실행해야합니다. Popen 솔루션을 사용하고 있지만 부 자연스럽게 보입니다. 예 :다중 처리를 사용하여 파이썬에서 여러 비동기 프로세스를 실행하는 방법은 무엇입니까?
def worker_email(keyword):
print('Before:' + keyword)
sleep(10)
print('After:' + keyword)
return True
기능이 하나씩, 아니 비동기을 실행
from time import sleep
from multiprocessing import Process, Value
import subprocess
def worker_email(keyword):
subprocess.Popen(["python", "mongoworker.py", str(keyword)])
return True
keywords_list = ['apple', 'banana', 'orange', 'strawberry']
if __name__ == '__main__':
for keyword in keywords_list:
# Do work
p = Process(target=worker_email, args=(keyword,))
p.start()
p.join()
내가 좋아하는,는 popen을 사용하지하려고하면
. 그래서 Popen을 사용하지 않고 동시에 모든 기능을 실행하는 방법은 무엇입니까?UPD : 내가 좋아하는, 프로세스에서 결과를 반환 multiprocessing.Value을 사용하고 있습니다 :
def worker_email(keyword, func_result):
sleep(10)
print('Yo:' + keyword)
func_result.value = 1
return True
func_result = Value('i', 0)
p = Process(target=worker_email, args=(doc['check_id'],func_result))
p.start()
# Change status
if func_result.value == 1:
stream.update_one({'_id': doc['_id']}, {"$set": {"status": True}}, upsert=False)
하지만 .join없이 작동하지 않습니다(). 어떤 아이디어를 어떻게 작동 시키거나 비슷한 방법으로 만드나요? :)
조금 더 설명 할 수 있습니까? :) 그리고 풀 대신 p.close()를 사용해야합니까? – sortas
@sortas 나는 대답을 편집했다. 아니,'p.close()'는 필요 없다. 풀에만이 기능이 있습니다. – MegaIng
한 번 더 자세히 설명 : 공유 값을 사용하여 프로세스의 결과를 반환하려고합니다. 같은 : 'func_result = 값 ('I'는, 0) p = 프로세스 (목표 = worker_email, 인수의 = (문서 [ 'check_id'] func_result)) p.start()를 # Обновляю статус задачи на "Выполнено"(если все ок) или не меняю статус и отправляю на повторое выполнение (если не ок) 경우 func_result.value == 1 : stream.update_one ({ '_ ID'문서 [ '_ ID']}, { "$ set": { "status": True}}, upsert = False)' 하지만 지금 가입하지 않고는 할 수 없습니다 :) 어떤 아이디어가 있습니까? – sortas