pythonのマルチプロセスシミュレーションの完全な支払い

!は/ usr / binに/のpython - * -コーディング:UTF-8 - * - 
''」@auther:mr.qin
@IDE:pycharm '' '

tool.Commonのインポート *
 から tool.request_data_change_to_StrEncodeの輸入request_data_change_to_str
 から tool.tencent_cloud_mysql_connect 輸入Mysql_operation
 インポートのインポート要求
 からマルチプロセッシングインポートプロセスを、キュー、プール、マネージャー、ロック
 輸入OS

my_op = Mysql_operation()
get_data = ''」order_sn order_info限界100から、ORDER_ID選択します。''」
データ = my_op.sql_operation(get_data)
data_to_str = request_data_change_to_str()
ロック = ロック()

デフtestDoWeChatNotify(Q):
    fwh_order_dict = {}
    fwh_order_id_list、fwh_order_sn_list = []、[]
     であれば   、データ=! ():
         のデータ:
            fwh_order_id = [ ' ORDER_ID ' ]
            fwh_order_sn = [ ' order_sn ' ]
            fwh_order_id_list.append(fwh_order_id)
            fwh_order_sn_list.append(fwh_order_sn)
        fwh_order_dict [ ' fwh_order_id ' ] = fwh_order_id_list
        fwh_order_dict [ ' fwh_order_sn ' ] = fwh_order_sn_list
         印刷( "....プット%sのキューを" %(fwh_order_dict))
        q.put(fwh_order_dict)


    リターン q.qsize() は、キューの数を返します。


デフasynchronousPay_process(Q、ORDER_ID、order_sn):
     もし   (!データ= ()):
        url_wechat_success_huidiao = fwh_test_api + ' /インデックス/注文/ doWeChatNotify ' 
        data_wechat_success_huidiao = data_to_str.requestDataToStr_firefoxAndChrome_fwh(''」order_sn:{}
ORDER_ID:{}
meth_id:4
タイムスタンプ:157129653969
記号:0687b01b300b9e300d3996a9d2173f1380973e5a ''」.format(order_sn、ORDER_ID))
        プリント(data_wechat_success_huidiao) 
        request_wechat_success_huidiao = requests.post(URL = url_wechat_success_huidiao、ヘッダー= headers_form_urlencoded、データ= data_wechat_success_huidiao)
        response_wechat_success_huidiao = request_wechat_success_huidiao.json()
         IF  ' オーダーステータスエラー、不払いにするためのための'   response_wechat_success_huidiao [ ' MSG ' ]:
             印刷(data_wechat_success_huidiao)
             印刷(request_wechat_success_huidiao.json())
    印刷' 支払命令を保留することは空です' 


デフrun_multiprocess():
    P =プール(9 
    Q = マネージャー()。待ち行列()
    サイズ = リスト(範囲(testDoWeChatNotify(Q)))
    情報 = q.get()
     のための I における範囲(LEN(インフォ[ ' fwh_order_id ' ])):
        lock.acquire() プラスミューテックス
        #の印刷( '現在のプロセス{}、{}親プロセスID'形式(os.getpid()、os.getppid())) 
        p.apply_async(FUNC = asynchronousPay_process、
                               引数 =(Q、インフォ[ ' fwh_order_id ' ] [i]は、インフォ[ ' fwh_order_sn ' ] [I]))
        lock.release() ロックを解除するには

    p.close()
    p.join()



もし __name__ == " __main__ " 
    START_TIME = time.time()  コンピュータプログラムの開始時刻
    run_multiprocess()
    Q =マネージャー()。キュー() 
    サイズ=リスト(レンジ(testDoWeChatNotify(Q))) 
    情報= q.get() 
    Iのためにありますレンジ(LEN(インフォ[ 'fwh_order_id'])): 
         asynchronousPay_process(Q、インフォ[ 'fwh_order_id'] [I]、インフォ[ 'fwh_order_sn'] [I])
    を印刷' プログラム加工{:} .2f ' .format(time.time() - START_TIME))  計算合計時間プログラム

アイデア:アイデアと同様のマルチスレッド、しかしと異なるモジュール、マルチプロセスを使用
theradingとシミュレーション、マルチスレッドモジュールマルチプロセッシング
multiprocessing.Queue()またはmultiprocessing.Manager()キュー()、マルチスレッド使用queue.Queue()を使用して、マルチプロセス・キュー、apply_async方法は、非ブロッキングである(非同期)バージョン法を適用する、キューは実際に改善された実行速度を導入、プロテスト:以上40秒で100件の注文を支払うために使用する複数のプロセスの前に、使用後の5.x秒で、
ルートコンピュータのパフォーマンスが何らかの関係を持つことになります!
問題:
  私は、パッケージを完了するために、クラスを使用するデバッグが、長い時間のためのデバッグの過程においては、問題(ではない一般的な発行キュー)が、兄のアドバイスを忘れて、
  スレッドの2数はより開始し(工程8つのスレッド)100を開始した立ち上げ、なぜマルチプロセスは、より高速な実行速度になりますか?(参加を用いた場合の間)
  3.要求は、要求を繰り返すことになりますが、一度だけ(私は8コースを作成し、なぜ一度だけ繰り返します)



 

おすすめ

転載: www.cnblogs.com/qtclm/p/12116327.html