データの受信側がないPythonマルチプロセッシングmultiprocessing.pipeパイプラインはスタックし、プロンプトもエラーもありません!!!

パイプ通信を使用するPythonマルチプロセッシングmultiprocessing.pipeプロデューサープロセスとコンシューマープロセスは、同時に実行する必要があります。

テストの結果、生産がない場合、消費は実行されません。

たとえば、次のプログラムでは、プロデューサーは10から30の間のデータを送信しませんが、コンシューマーは実行しません(出力なし)。

なんで?受信側は実行されていませんが10がデータの受信を待機している場所で動かなくなっています。私のブログの2番目の状況を参照してください

さらに真剣に、これは例外ではなく、キャプチャすることはできません!受信側のプログラムは実行できません!(次の送信者からのデータが到着する前)

 

解決策:おい、良い解決策がない場合は、代わりにmultiprocessing.Managerのキューを使用してください!Manager.Queue()Dafaは良いです!

良い方法はありますか?ようこそ教えて!

 

次のコードは、PEP8仕様に準拠しています。(私がコードが乱雑であると告白される前は、人々は読む気がありませんでした...)

import time
from multiprocessing import Pipe, Process
 

def sed_fun(p_conn):
    all_sed = 0
    s, r = p_conn
    send_num = 0
 
    while True:
        time.sleep(1)
        all_sed += 1
        print('sending...', all_sed)
        try:
            send_num += 1
            print('try to send', send_num)

            if send_num < 10:
                msg = 1111
                print('sending', msg)
                s.send([msg])
 
            elif send_num > 30:
                msg = 2222
                print('sending', msg)
                s.send([msg])
 
            else:
                print('no send any more')
                # sed.close() # uncomment will cause the sed proc not to be resurrected after 30
 
        except Exception as e:
            print(e)
            print('can not send')


def rec_fun(p_conn):
    all_rec = 0
    s, r = p_conn

    while True:
        time.sleep(1)
        all_rec += 1
        print('\nreceiving.....', all_rec)
 
        try:
            print('\n', r.recv())  # If there is no data in pipe, it will be stuck here with no notification!!!
        except Exception as e:  # this except has no use when stucked above!
            print(e)
            print('can not recv')
 

if __name__ == '__main__':

    sed, rec = Pipe()

    sed_proc = Process(target=sed_fun, args=((sed, rec), ))
    rec_proc = Process(target=rec_fun, args=((sed, rec), ))
 
    sed_proc.start()
    rec_proc.start()

    sed_proc.join()
    rec_proc.join()

 

公開された202元の記事 ウォン称賛80 ビュー30万+

おすすめ

転載: blog.csdn.net/qxqxqzzz/article/details/105104408