#!は/ 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コースを作成し、なぜ一度だけ繰り返します)
pythonのマルチプロセスシミュレーションの完全な支払い
おすすめ
転載: www.cnblogs.com/qtclm/p/12116327.html
ランキング