いくつかのCPUバインドされたタスクで動作するマルチプロセッシングを取得しようとしています。しかし、私は子プロセスで関数を呼び出す方法を理解することができず、帯域外タスクを実行するために何らかの引数を渡す可能性があります。どんな助けもありがとう。関数を呼び出して、多重処理でいくつかの引数を渡す方法
child.py
import multiprocessing
def Performer(multiprocessing.Process):
def __init__(self, taks_queue):
super().__init__()
self.taks_queue = taks_queue
self.term_str = "done"
def set_term_str(self, term_str):
self.term_str = term_str
def run(self):
while True:
task = taks_queue.get()
if task == self.term_str:
while taks_queue.qsize() > 0:
taks_queue.get()
else:
handle_task(task)
parent.py
import multiprocessing
def Generator(multiprocessing.Process):
def run(self):
taks_queues = [multiprocessing.Queue(-1) for i in range(5)]
for i in range(5):
perfs.append(Performer(taks_queue = taks_queue[i]))
perfs[i].start()
while True:
message = get_message()
mod = check_message(message)
if mod != 0:
term_str = get_term_str(mod,message)
perfs[mod].set_term_str(term_str)
handle_task(task)
if __name__=="__main__":
gen = Generator()
gen.start()
gen.join()
発電機は、外の世界と通信し、必要なときに長期文字列を変更する必要があります。どのように私は別のマルチプロセッシングの関数を呼び出すことができるだろうか。プロセスとマルチプロセスの実行動作を変更するいくつかの引数を渡す。プロセス?
おかげで、参照、サブプロセスワーカープールの偉大なメカニズムを提供します記憶が助けにならない。私はメッセージのterm_strベースを変更する必要があり、最初のいくつかのメッセージの後に出演者が異なるterm_strを持つことが予想されるため、プールは適切ではありません。 – SCM
の場合は、キュー経由でterm_strをプッシュする必要があります。あなたのコードでやろうとしたことをすることはできません。 –