私は子プロセスを作成し、Futureを使用して結果を受け取って、必要なときにそれらの一部を強制終了するという要件があります。マルチプロセスとプロセスをconcurrent.future._base.Futureで統合する
私はこれをサブクラス化し、multiprocessing.Processクラスを作成し、start()メソッドからFutureオブジェクトを返します。
問題は、決して呼び出されないので、私はcb()関数で結果を受け取ることができないということです。
私の現在の実装ではこれが何か他の方法で行なわれているのであれば、助けてください。続き
は、あなたがあなたが返す新しい未来を作成し、あなたのstartメソッドで
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')
返信いただきありがとうございます。これは本当にばかげた間違いでした。気づいてくれてありがとう! :) –