나는 하위 프로세스를 생성하고, Future를 사용하여 결과를 받아야하며, 필요할 때 그 중 일부를 죽여야한다.다중 처리. 프로세스를 concurrent.future._base.Future와 통합하기
이 때문에 나는 다중 처리. 서브 클래스를 처리하고 start() 메소드에서 Future 객체를 리턴한다.
문제는 내가 결코 호출되지 않기 때문에 cb() 함수에서 결과를 수신 할 수 없다는 것입니다.
이 방법이 현재 구현에서 누락되었거나 다른 방법으로 수행 될 수 있다면 도와주십시오.
을 수행하면 내 현재 접근하여 시작 방법에
from multiprocessing import Process, Queue
from concurrent.futures import _base
import threading
from time import sleep
def foo(x,q):
print('result {}'.format(x*x))
result = x*x
sleep(5)
q.put(result)
class MyProcess(Process):
def __init__(self, target, args):
super().__init__()
self.target = target
self.args = args
self.f = _base.Future()
def run(self):
q = Queue()
worker_thread = threading.Thread(target=self.target, args=(self.args+ (q,)))
worker_thread.start()
r = q.get(block=True)
print('setting result {}'.format(r))
self.f.set_result(result=r)
print('done setting result')
def start(self):
f = _base.Future()
run_thread = threading.Thread(target=self.run)
run_thread.start()
return f
def cb(future):
print('received result in callback {}'.format(future))
def main():
p1 = MyProcess(target=foo, args=(2,))
f = p1.start()
f.add_done_callback(fn=cb)
sleep(10)
if __name__ == '__main__':
main()
print('Main thread dying')
답장을 보내 주셔서 감사합니다. 이것은 정말 바보 같은 실수였습니다. 주의 해 주셔서 감사합니다! :) –