Python でマルチプロセッシングを使用して、関数をループ内で呼び出し続け、その後関数からの最新の戻り値にアクセスしようとしています (値を LIFO キューに格納することにより)。
メイン プログラムのコード スニペットを次に示します。
q = Queue.LifoQueue()
while True:
p = multiprocessing.Process(target=myFunc, args = (q))
p.daemon = True
p.start()
if not q.empty():
#do something with q.get()
myFunc のコード スニペットを次に示します。
def myFunc(q):
x = calc()
q.put(x)
問題は、メイン ループが q が空であると見なすことです。ただし、(q.put(x) の直後に q.empty() チェックを入れることによって) myFunc() が q に値を配置しているかどうかを確認しましたが、キューは空であってはなりません。
メインループがキューに配置された値を確認できるようにするにはどうすればよいですか? それとも、非効率的な方法でこれを行っていますか? (ただし、myFunc は少し遅く、メイン ループはそのタスクを実行し続ける必要があるため、myFunc とメイン ループを別々に実行する必要があります)