2017-08-21 15 views
0

これで、時宜にかなった方法で実行されるかどうかを判断するツールを呼び出す方法があります。サーバーにハートビートを送って、まだ実行中であることを伝え、時間がなくなったかどうかを確認できます。ハートビートを送信中にメソッドを実行し、メソッドの戻り値を取得する方法

class Worker: 

    def run: 
     proc = Process(target=_execute, args=(foo, bar,)) 
     proc.start() 
     while True: 
      if proc.is_alive(): 
       if not _heart_beat(): 
        # Server told us to stop, kill the _execute process. 
        proc.terminate() 
        break 
      else: 
       # _execute is done, we can stop sending heartbeats 
       break 
      time.sleep(beat_interval) 

    def _execute(foo, bar): 
     #exec /bin/foo 
     #exec /bin/bar 
     #do something with their output 
     return foo_bar 

これは私のために動作しますが、私は_executeの戻り値を取得できるようにしたいと思います:

のコードは次のようになります。

答えて

1

あなたが結果格納するのにinstance memberを使用することができます。

class Worker(object): # inherit from object - python-2.7 
    def __init__(self): 
     self.result = None 

    def run(self): 
     ... 
     else: # process finished 
      return self.result 

    def _execute(self, foo, bar): 
     # run foo and bar 
     self.result = foo_bar 
0

使用Queue

from multiprocessing import Process, Queue 

def _execute(q, foo, bar): 
    # do stuff 
    q.put(return_value) 

... class etc... 
def run(): 
    q = Queue() 
    p = Process(target=_execute args=(q, foo, bar)) 
    p.start() 
    while True: 
     if proc.is_alive(): 
      if not _heart_beat(): 
       # Server told us to stop, kill the _execute process. 
       proc.terminate() 
       break 
     else: 
      return_code = q.get() 
      break 
     ... etc ... 
関連する問題