多線程編程方式1:

多線程編程1:
[root@yyjk ~/sbin/socket]#cat parallel_send_ocr.py
# -*- coding: utf-8 -*-
import cookielib
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
import json
import httplib
import re
import requests
requests.packages.urllib3.disable_warnings()
import StringIO
import time
import ssl
import sys
import pycontrol.pycontrol as pc
import time
import csv
import ssl
import json
import threading
import SocketServer
import socket
import time
import sys
reload(sys)
print time.ctime()
sys.setdefaultencoding('utf-8')
def fun1():
  #.decode('utf-8').encode('gbk')
     print 'call fun1'
     time.sleep(5)
     host='10.2.229.105'
     print 'host'+'->'+host
     port=39037
     bufsize=10240
     addr=(host,port)
     s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
     s.settimeout(20)
     s.connect((host,port))
     data=''
     data='<?xml version="1.0" encoding="UTF-8"?> <SERVICE> <SYS_HEAD> <SERVICE_SCENE>16</SERVICE_SCENE> <SERVICE_CODE>13003000026</SERVICE_CODE> <CONSUMER_ID>101060</CONSUMER_ID> <CONSUMER_SEQ_NO>201911131504570045557</CONSUMER_SEQ_NO> <TRAN_TIMESTAMP>153821</TRAN_TIMESTAMP> <TRAN_DATE>20191119</TRAN_DATE> </SYS_HEAD> <APP_HEAD> <BRANCH_ID>001</BRANCH_ID> <BUSS_SEQ_NO>2333333</BUSS_SEQ_NO> </APP_HEAD> <LOCAL_HEAD></LOCAL_HEAD> <BODY> <URL_ADDRESS>http://20.2.26.210:8013/plate/plate/6.jpg<;/URL_ADDRESS> <GLOBAL_TYPE>2</GLOBAL_TYPE> <NEED_WARN_FLAG>ture</NEED_WARN_FLAG> </BODY> </SERVICE>'
     length = len(data.encode('utf-8'))
     slen = '%08d' % length
     data=slen + data
     print data
     #msg = data.encode('gbk')
     s.send(data)
     data = s.recv(bufsize)
     # print data.strip()
     cur_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
     print ("%s receice from server :%s") % (cur_time,data)
     s.close()
def fun2():
     print 'call fun2'
     time.sleep(6)
   #.decode('utf-8').encode('gbk')
     host='10.2.229.105'
     print 'host'+'->'+host
     port=39037
     bufsize=10240
     addr=(host,port)
     s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
     s.settimeout(20)
     s.connect((host,port))
     data='<?xml version="1.0" encoding="UTF-8"?> <SERVICE> <SYS_HEAD> <SERVICE_SCENE>18</SERVICE_SCENE> <SERVICE_CODE>13003000026</SERVICE_CODE> <CONSUMER_SEQ_NO>2019111315045700333331</CONSUMER_SEQ_NO> <TRAN_TIMESTAMP>171021</TRAN_TIMESTAMP> <TRAN_DATE>20200603</TRAN_DATE> <CONSUMER_ID>101060</CONSUMER_ID> </SYS_HEAD> <APP_HEAD> <BRANCH_ID>001</BRANCH_ID> <BUSS_SEQ_NO>2019111315045700333331</BUSS_SEQ_NO> </APP_HEAD> <LOCAL_HEAD> </LOCAL_HEAD> <BODY> <URL_ADDRESS>http://20.2.26.21:8013/plate/xsz.jpg<;/URL_ADDRESS> <GLOBAL_TYPE>0</GLOBAL_TYPE> </BODY> </SERVICE>'
     length = len(data.encode('utf-8'))
     slen = '%08d' % length
     data=slen + data
     print data
     #msg = data.encode('gbk')
     s.send(data)
     data = s.recv(bufsize)
     # print data.strip()
     cur_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
     print ("%s receice from server :%s") % (cur_time,data)
     s.close()
  
def fun3():
     print 'call fun3'
     time.sleep(7)
  #.decode('utf-8').encode('gbk')
     host='10.2.229.105'
     print 'host'+'->'+host
     port=39037
     bufsize=10240
     addr=(host,port)
     s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
     s.settimeout(20)
     s.connect((host,port))
     data='<?xml version="1.0" encoding="UTF-8"?> <SERVICE> <SYS_HEAD> <SERVICE_SCENE>17</SERVICE_SCENE> <SERVICE_CODE>13003000028</SERVICE_CODE> <CONSUMER_SEQ_NO>2019111315045700333332</CONSUMER_SEQ_NO> <TRAN_TIMESTAMP>172221</TRAN_TIMESTAMP> <TRAN_DATE>20200603</TRAN_DATE> <CONSUMER_ID>101060</CONSUMER_ID> </SYS_HEAD> <APP_HEAD> <BRANCH_ID>001</BRANCH_ID> <BUSS_SEQ_NO>2019111315045700333332</BUSS_SEQ_NO> </APP_HEAD> <LOCAL_HEAD></LOCAL_HEAD> <BODY> <URL_ADDRESS>http://20.2.26.21:8013/plate/yyzz.jpg<;/URL_ADDRESS> </BODY> </SERVICE>'
     #data='<?xml version="1.0" encoding="UTF-8"?> <SERVICE> <SYS_HEAD> <SERVICE_SCENE>16</SERVICE_SCENE> <SERVICE_CODE>13003000026</SERVICE_CODE> <CONSUMER_ID>101060</CONSUMER_ID> <CONSUMER_SEQ_NO>201911131504570045557</CONSUMER_SEQ_NO> <TRAN_TIMESTAMP>153821</TRAN_TIMESTAMP> <TRAN_DATE>20191119</TRAN_DATE> </SYS_HEAD> <APP_HEAD> <BRANCH_ID>001</BRANCH_ID> <BUSS_SEQ_NO>2333333</BUSS_SEQ_NO> </APP_HEAD> <LOCAL_HEAD></LOCAL_HEAD> <BODY> <URL_ADDRESS>http://20.2.26.21:8013/plate/plate/6.jpg<;/URL_ADDRESS> <GLOBAL_TYPE>2</GLOBAL_TYPE> <NEED_WARN_FLAG>ture</NEED_WARN_FLAG> </BODY> </SERVICE>'
     length = len(data.encode('utf-8'))
     slen = '%08d' % length
     data=slen + data
     print data
     #msg = data.encode('gbk')
     s.send(data)
     data = s.recv(bufsize)
     # print data.strip()
     cur_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
     print ("%s receice from server :%s") % (cur_time,data)
     s.close()

def fun4():
     print 'call fun4'
     time.sleep(7)
  #.decode('utf-8').encode('gbk')
     host='10.2.229.105'
     print 'host'+'->'+host
     port=39037
     bufsize=10240
     addr=(host,port)
     s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
     s.settimeout(20)
     s.connect((host,port))
     data='<?xml version="1.0" encoding="UTF-8"?> <SERVICE> <SYS_HEAD> <SERVICE_SCENE>19</SERVICE_SCENE> <SERVICE_CODE>13003000026</SERVICE_CODE> <<CONSUMER_SEQ_NO>2019111315045700333333</CONSUMER_SEQ_NO> <TRAN_TIMESTAMP>172221</TRAN_TIMESTAMP> <TRAN_DATE>20200603</TRAN_DATE> <CONSUMER_ID>101060</CONSUMER_ID> </SYS_HEAD> <APP_HEAD> <BUSS_SEQ_NO>2019111315045700333333</BUSS_SEQ_NO> <BRANCH_ID>001</BRANCH_ID> </APP_HEAD> <LOCAL_HEAD></LOCAL_HEAD> <BODY> <GLOBAL_TYPE>General</GLOBAL_TYPE> <URL_ADDRESS>http://20.2.26.21:8013/plate/jhz.jpg<;/URL_ADDRESS> </BODY> </SERVICE>'
     #data='<?xml version="1.0" encoding="UTF-8"?> <SERVICE> <SYS_HEAD> <SERVICE_SCENE>16</SERVICE_SCENE> <SERVICE_CODE>13003000026</SERVICE_CODE> <CONSUMER_ID>101060</CONSUMER_ID> <CONSUMER_SEQ_NO>201911131504570045557</CONSUMER_SEQ_NO> <TRAN_TIMESTAMP>153821</TRAN_TIMESTAMP> <TRAN_DATE>20191119</TRAN_DATE> </SYS_HEAD> <APP_HEAD> <BRANCH_ID>001</BRANCH_ID> <BUSS_SEQ_NO>2333333</BUSS_SEQ_NO> </APP_HEAD> <LOCAL_HEAD></LOCAL_HEAD> <BODY> <URL_ADDRESS>http://20.2.26.21:8013/plate/plate/6.jpg<;/URL_ADDRESS> <GLOBAL_TYPE>2</GLOBAL_TYPE> <NEED_WARN_FLAG>ture</NEED_WARN_FLAG> </BODY> </SERVICE>'
     length = len(data.encode('utf-8'))
     slen = '%08d' % length
     data=slen + data
     print data
     #msg = data.encode('gbk')
     s.send(data)
     data = s.recv(bufsize)
     # print data.strip()
     cur_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
     print ("%s receice from server :%s") % (cur_time,data)
     s.close()
def fun5():
     print 'call fun5'
     time.sleep(9)
  #.decode('utf-8').encode('gbk')
     host='10.2.229.105'
     print 'host'+'->'+host
     port=39037
     bufsize=10240
     addr=(host,port)
     s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
     s.settimeout(20)
     s.connect((host,port))
     data='<?xml version="1.0" encoding="UTF-8"?> <SERVICE> <SYS_HEAD> <SERVICE_SCENE>18</SERVICE_SCENE> <SERVICE_CODE>13003000028</SERVICE_CODE> <<CONSUMER_SEQ_NO>2019111315045700333336</CONSUMER_SEQ_NO> <TRAN_TIMESTAMP>172221</TRAN_TIMESTAMP> <TRAN_DATE>20200603</TRAN_DATE> <CONSUMER_ID>101060</CONSUMER_ID> </SYS_HEAD> <APP_HEAD> <BUSS_SEQ_NO>2019111315045700333336</BUSS_SEQ_NO> <BRANCH_ID>001</BRANCH_ID> </APP_HEAD> <LOCAL_HEAD></LOCAL_HEAD> <BODY> <URL_ADDRESS>http://20.2.26.21:8013/plate/zzjg.jpg<;/URL_ADDRESS> </BODY> </SERVICE>'
     #data='<?xml version="1.0" encoding="UTF-8"?> <SERVICE> <SYS_HEAD> <SERVICE_SCENE>16</SERVICE_SCENE> <SERVICE_CODE>13003000026</SERVICE_CODE> <CONSUMER_ID>101060</CONSUMER_ID> <CONSUMER_SEQ_NO>201911131504570045557</CONSUMER_SEQ_NO> <TRAN_TIMESTAMP>153821</TRAN_TIMESTAMP> <TRAN_DATE>20191119</TRAN_DATE> </SYS_HEAD> <APP_HEAD> <BRANCH_ID>001</BRANCH_ID> <BUSS_SEQ_NO>2333333</BUSS_SEQ_NO> </APP_HEAD> <LOCAL_HEAD></LOCAL_HEAD> <BODY> <URL_ADDRESS>http://20.2.26.21:8013/plate/plate/6.jpg<;/URL_ADDRESS> <GLOBAL_TYPE>2</GLOBAL_TYPE> <NEED_WARN_FLAG>ture</NEED_WARN_FLAG> </BODY> </SERVICE>'
     length = len(data.encode('utf-8'))
     slen = '%08d' % length
     data=slen + data
     print data
     #msg = data.encode('gbk')
     s.send(data)
     data = s.recv(bufsize)
     # print data.strip()
     cur_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
     print ("%s receice from server :%s") % (cur_time,data)
     s.close()
threads = []
t1 = threading.Thread(target=fun1,name='fun1')
threads.append(t1)
t2 = threading.Thread(target=fun2,name='fun2')
threads.append(t2)
t3 = threading.Thread(target=fun3,name='fun3')
threads.append(t3)
t4 = threading.Thread(target=fun4,name='fun4')
threads.append(t4)
t5 = threading.Thread(target=fun5,name='fun5')
threads.append(t5)




for t in threads:
   t.setDaemon(True)
   t.start()
for t in threads:
  t.join()
 

[root@yyjk ~/sbin/socket]#time python parallel_send_ocr.py
Thu Jun  4 10:25:27 2020
call fun1
call fun2
call fun3
call fun4
call fun5
host->10.2.229.105
00000582<?xml version="1.0" encoding="UTF-8"?> <SERVICE> <SYS_HEAD> <SERVICE_SCENE>16</SERVICE_SCENE> <SERVICE_CODE>13003000026</SERVICE_CODE> <CONSUMER_ID>101060</CONSUMER_ID> <CONSUMER_SEQ_NO>201911131504570045557</CONSUMER_SEQ_NO> <TRAN_TIMESTAMP>153821</TRAN_TIMESTAMP> <TRAN_DATE>20191119</TRAN_DATE> </SYS_HEAD> <APP_HEAD> <BRANCH_ID>001</BRANCH_ID> <BUSS_SEQ_NO>2333333</BUSS_SEQ_NO> </APP_HEAD> <LOCAL_HEAD></LOCAL_HEAD> <BODY> <URL_ADDRESS>http://20.2.26.210:8013/plate/plate/6.jpg<;/URL_ADDRESS> <GLOBAL_TYPE>2</GLOBAL_TYPE> <NEED_WARN_FLAG>ture</NEED_WARN_FLAG> </BODY> </SERVICE>
host->10.2.229.105
00000556<?xml version="1.0" encoding="UTF-8"?> <SERVICE> <SYS_HEAD> <SERVICE_SCENE>18</SERVICE_SCENE> <SERVICE_CODE>13003000026</SERVICE_CODE> <CONSUMER_SEQ_NO>2019111315045700333331</CONSUMER_SEQ_NO> <TRAN_TIMESTAMP>171021</TRAN_TIMESTAMP> <TRAN_DATE>20200603</TRAN_DATE> <CONSUMER_ID>101060</CONSUMER_ID> </SYS_HEAD> <APP_HEAD> <BRANCH_ID>001</BRANCH_ID> <BUSS_SEQ_NO>2019111315045700333331</BUSS_SEQ_NO> </APP_HEAD> <LOCAL_HEAD> </LOCAL_HEAD> <BODY> <URL_ADDRESS>http://20.2.26.21:8013/plate/xsz.jpg<;/URL_ADDRESS> <GLOBAL_TYPE>0</GLOBAL_TYPE> </BODY> </SERVICE>
host->10.2.229.105
host->10.2.229.105
00000527<?xml version="1.0" encoding="UTF-8"?> <SERVICE> <SYS_HEAD> <SERVICE_SCENE>17</SERVICE_SCENE> <SERVICE_CODE>13003000028</SERVICE_CODE> <CONSUMER_SEQ_NO>2019111315045700333332</CONSUMER_SEQ_NO> <TRAN_TIMESTAMP>172221</TRAN_TIMESTAMP> <TRAN_DATE>20200603</TRAN_DATE> <CONSUMER_ID>101060</CONSUMER_ID> </SYS_HEAD> <APP_HEAD> <BRANCH_ID>001</BRANCH_ID> <BUSS_SEQ_NO>2019111315045700333332</BUSS_SEQ_NO> </APP_HEAD> <LOCAL_HEAD></LOCAL_HEAD> <BODY> <URL_ADDRESS>http://20.2.26.21:8013/plate/yyzz.jpg<;/URL_ADDRESS> </BODY> </SERVICE>00000562<?xml version="1.0" encoding="UTF-8"?> <SERVICE> <SYS_HEAD> <SERVICE_SCENE>19</SERVICE_SCENE> <SERVICE_CODE>13003000026</SERVICE_CODE> <<CONSUMER_SEQ_NO>2019111315045700333333</CONSUMER_SEQ_NO> <TRAN_TIMESTAMP>172221</TRAN_TIMESTAMP> <TRAN_DATE>20200603</TRAN_DATE> <CONSUMER_ID>101060</CONSUMER_ID> </SYS_HEAD> <APP_HEAD> <BUSS_SEQ_NO>2019111315045700333333</BUSS_SEQ_NO> <BRANCH_ID>001</BRANCH_ID> </APP_HEAD> <LOCAL_HEAD></LOCAL_HEAD> <BODY> <GLOBAL_TYPE>General</GLOBAL_TYPE> <URL_ADDRESS>http://20.2.26.21:8013/plate/jhz.jpg<;/URL_ADDRESS> </BODY> </SERVICE>

2020-06-04 10:25:34 receice from server :00000274<?xml version="1.0" encoding="UTF-8"?><SERVICE><SYS_HEAD><RET><RET_MSG>標準報文服務識別基礎服務執行異常</RET_MSG><RET_CODE>500101011103</RET_CODE></RET><RET_STATUS>F</RET_STATUS></SYS_HEAD><APP_HEAD></APP_HEAD><LOCAL_HEAD></LOCAL_HEAD><BODY></BODY></SERVICE>
2020-06-04 10:25:35 receice from server :00003295<?xml version="1.0" encoding="UTF-8"?><SERVICE><SYS_HEAD><RET><RET_MSG>營業執照識別成功!!!</RET_MSG><RET_CODE>000000</RET_CODE></RET><ESB_SEQ_NO>50010120200604050000000649</ESB_SEQ_NO><PROVIDER_ID></PROVIDER_ID><TRAN_TIMESTAMP>172221</TRAN_TIMESTAMP><CONSUMER_SEQ_NO>2019111315045700333332</CONSUMER_SEQ_NO><SERVICE_SCENE>17</SERVICE_SCENE><RET_STATUS>S</RET_STATUS><SERVICE_CODE>13003000028</SERVICE_CODE><CONSUMER_ID>101060</CONSUMER_ID><TRAN_DATE>20200603</TRAN_DATE></SYS_HEAD><APP_HEAD><BRANCH_ID>001</BRANCH_ID><BUSS_SEQ_NO>2019111315045700333332</BUSS_SEQ_NO><SERV_SEQ_NO>2019111315045700333332</SERV_SEQ_NO></APP_HEAD><LOCAL_HEAD></LOCAL_HEAD><BODY><MANAGE_INFO_ARRAY><PSTN_CRDNT_POINT>{&quot;width&quot;:924,&quot;x&quot;:336,&quot;y&quot;:659,&quot;height&quot;:66}</PSTN_CRDNT_POINT><FIELD_VALUE1>設備、建築裝、材料、鋼織維;銷品、開品、酒運機、剪切機、機械設備、鋼材、電子設備、出口(國家法律法規禁止經營的,不得經營、應絡、批務,不、太相能設備;貨物進出口</FIELD_VALUE1><MATCH_PROPORTION>0.8346915245056152</MATCH_PROPORTION></MANAGE_INFO_ARRAY><ADDRESS_ARRAY><PSTN_CRDNT_POINT>{&quot;width&quot;:351,&quot;x&quot;:356,&quot;y&quot;:501,&quot;height&quot;:34}</PSTN_CRDNT_POINT><FIELD_VALUE1>鄭州高新區冬青街7號配樓102號</FIELD_VALUE1><MATCH_PROPORTION>0.9821681380271912</MATCH_PROPORTION></ADDRESS_ARRAY><CO_INFO_ARRAY><PSTN_CRDNT_POIN
2020-06-04 10:25:35 receice from server :00000610<?xml version="1.0" encoding="UTF-8"?><SERVICE><SYS_HEAD><RET><RET_MSG>ERROR_PARAMETER_EMPTY</RET_MSG><RET_CODE>-1301</RET_CODE></RET><ESB_SEQ_NO>50010120200604050000000647</ESB_SEQ_NO><PROVIDER_ID></PROVIDER_ID><TRAN_TIMESTAMP>153821</TRAN_TIMESTAMP><CONSUMER_SEQ_NO>201911131504570045557</CONSUMER_SEQ_NO><SERVICE_SCENE>16</SERVICE_SCENE><RET_STATUS>F</RET_STATUS><SERVICE_CODE>13003000026</SERVICE_CODE><CONSUMER_ID>101060</CONSUMER_ID><TRAN_DATE>20191119</TRAN_DATE></SYS_HEAD><APP_HEAD><BRANCH_ID>001</BRANCH_ID><BUSS_SEQ_NO>2333333</BUSS_SEQ_NO></APP_HEAD><LOCAL_HEAD></LOCAL_HEAD><BODY></BODY></SERVICE>
2020-06-04 10:25:36 receice from server :00003277<?xml version="1.0" encoding="UTF-8"?><SERVICE><SYS_HEAD><RET><RET_MSG>證件識別成功!!!</RET_MSG><RET_CODE>000000</RET_CODE></RET><ESB_SEQ_NO>50010120200604050000000648</ESB_SEQ_NO><PROVIDER_ID></PROVIDER_ID><TRAN_TIMESTAMP>171021</TRAN_TIMESTAMP><CONSUMER_SEQ_NO>2019111315045700333331</CONSUMER_SEQ_NO><SERVICE_SCENE>18</SERVICE_SCENE><RET_STATUS>S</RET_STATUS><SERVICE_CODE>13003000026</SERVICE_CODE><CONSUMER_ID>101060</CONSUMER_ID><TRAN_DATE>20200603</TRAN_DATE></SYS_HEAD><APP_HEAD><BRANCH_ID>001</BRANCH_ID><BUSS_SEQ_NO>2019111315045700333331</BUSS_SEQ_NO><SERV_SEQ_NO>2019111315045700333331</SERV_SEQ_NO></APP_HEAD><LOCAL_HEAD></LOCAL_HEAD><BODY><BUSS_PARAM_ARRAY><PSTN_CRDNT_POINT>{&quot;width&quot;:189,&quot;x&quot;:604,&quot;y&quot;:600,&quot;height&quot;:68}</PSTN_CRDNT_POINT><FIELD_VALUE1>1014339</FIELD_VALUE1><MATCH_PROPORTION>0.9989184737205505</MATCH_PROPORTION></BUSS_PARAM_ARRAY><ADDRESS_ARRAY><PSTN_CRDNT_POINT>{&quot;width&quot;:824,&quot;x&quot;:315,&quot;y&quot;:359,&quot;height&quot;:60}</PSTN_CRDNT_POINT><FIELD_VALUE1>浙江省杭州市桐廬縣鐘山鄉城下村對山七組</FIELD_VALUE1><MATCH_PROPORTION>0.9998767971992493</MATCH_PROPORTION></ADDRESS_ARRAY><CO_INFO_ARRAY><PSTN_CRDNT_POINT>{&quot;width&quot;:231,&quot;x&quot;:157,&quot;y&quot;:533,&quot;height&quot;:205}</PSTN_CRDNT_POINT><FIELD_VALUE1>浙江省杭州市公安局交通警察支</FIELD_VALUE1><MATCH_PROPORTION>0.9997683763504028</MATCH_PROPORTION></CO_INFO_ARRAY><BRND_TP_INFO_ARRAY><PSTN_CRDNT_POINT>{&quot;width&quot;:472,&quot;x&quot;:652,&quot;y&quot;:435,&quot;height&quot;:58}</PSTN_CRDNT_POINT><FIELD_VALUE1>思鉑睿牌DHW7244CUDSD</FIELD_VALUE1><MATCH_PROPORTION>0.9998399615287781</MATCH_PROPORTION></BRND_TP_INFO_ARRAY><USING_KIND_INFO_ARRAY><PSTN_CRDNT_POINT>{&quot;width&quot;:143,&quot;x&quot;:319,&quot;y&quot;:443,&quot;height&quot;:57}</PSTN_CRDNT_POINT><FIELD_VALUE1>非營運</FIELD_VALUE1><MATCH_PROPORTION>1.0</MATCH_PROPORTION></USING_KIND_INFO_ARRAY><PLACE_TM_CFG_ARRAY><PSTN_CRDNT_POINT>{&quot;width&quot;:248,&quot;x&quot;:552,&quot;y&quot;:685,&quot;height&quot;:55}</PSTN_CRDNT_POINT><FIELD_VALUE1>2016-02-24</FIELD_VALUE1><MATCH_PROPORTION>0.9997665286064148</MATCH_PROPORTION></PLACE_TM_CFG_ARRAY><CAR_TP_INFO_ARRAY><PSTN_CRDNT_POINT>{&quot;width&quot;:185,&quot;x&quot;:749,&quot;y&quot;:201,&quot;height&quot;:63}</PSTN_CRDNT_POINT><FIELD_VALUE1>小型轎車</FIELD_VALUE1><MATCH_PROPORTION>0.9998067617416382</MATCH_PROPORTION></CAR_TP_INFO_ARRAY><VEHICLE_LICENSE_NO_INFO_ARRAY><PSTN_CRDNT_POINT>{&quot;width&quot;:195,&quot;x&quot;:313,&quot;y&quot;:197,&quot;height&quot;:58}</PSTN_CRDNT_POINT><FIELD_VALUE1>浙AD6U89</FIELD_VALUE1><MATCH_PROPORTION>0.9999479651451111</MATCH_PROPORTION></VEHICLE_LICENSE_NO_INFO_ARRAY><CLNT_INFO_ARRAY><PSTN_CRDNT_POINT>{&quot;width&quot;:114,&quot;x&quot;:310,&quot;y&quot;:279,&quot;height&quot;:60}</PSTN_CRDNT_POINT><FIELD_VALUE1>童晨</FIELD_VALUE1><MATCH_PROPORTION>0.9421995878219605</MATCH_PROPORTION></CLNT_INFO_ARRAY><PARAM_INFO_ARRAY><PSTN_CRDNT_POINT>{&quot;width&quot;:406,&quot;x&quot;:627,&quot;y&quot;:524,&quot;height&quot;:59}</PSTN_CRDNT_POINT><FIELD_VALUE1>LVHCU664XF5014331</FIELD_VALUE1><MATCH_PROPORTION>0.9988352656364441</MATCH_PROPORTION></PARAM_INFO_ARRAY></BODY></SERVICE>
host->10.2.229.105
00000528<?xml version="1.0" encoding="UTF-8"?> <SERVICE> <SYS_HEAD> <SERVICE_SCENE>18</SERVICE_SCENE> <SERVICE_CODE>13003000028</SERVICE_CODE> <<CONSUMER_SEQ_NO>2019111315045700333336</CONSUMER_SEQ_NO> <TRAN_TIMESTAMP>172221</TRAN_TIMESTAMP> <TRAN_DATE>20200603</TRAN_DATE> <CONSUMER_ID>101060</CONSUMER_ID> </SYS_HEAD> <APP_HEAD> <BUSS_SEQ_NO>2019111315045700333336</BUSS_SEQ_NO> <BRANCH_ID>001</BRANCH_ID> </APP_HEAD> <LOCAL_HEAD></LOCAL_HEAD> <BODY> <URL_ADDRESS>http://20.2.26.21:8013/plate/zzjg.jpg<;/URL_ADDRESS> </BODY> </SERVICE>
2020-06-04 10:25:36 receice from server :00000274<?xml version="1.0" encoding="UTF-8"?><SERVICE><SYS_HEAD><RET><RET_MSG>標準報文服務識別基礎服務執行異常</RET_MSG><RET_CODE>500101011103</RET_CODE></RET><RET_STATUS>F</RET_STATUS></SYS_HEAD><APP_HEAD></APP_HEAD><LOCAL_HEAD></LOCAL_HEAD><BODY></BODY></SERVICE>

real 0m9.263s
user 0m0.201s
sys 0m0.043s



-----原始郵件-----
發件人:spring <[email protected]>
發送時間:2020-06-04 10:14:45 (星期四)
收件人: 015208 <[email protected]>
抄送:
主題:



node2:/root/python/20200525#cat t600.py

import requests
import time

def download_one(url):
    resp = requests.get(url)
    print('Read {} from {}'.format(len(resp.content), url))
   
def download_all(sites):
    for site in sites:
        download_one(site)

def main():
    sites = [
    'http://192.168.137.3:9000/test111/',
    'http://192.168.137.3:9000/test222/',
    'http://192.168.137.3:9000/test333/'
    ]
    start_time = time.perf_counter()
    download_all(sites)
    end_time = time.perf_counter()
    print('Download {} sites in {} seconds'.format(len(sites), end_time - start_time))
   
if __name__ == '__main__':
    main()
 
 
node2:/root/python/20200525#time python3 t600.py
Read 75453 from http://192.168.137.3:9000/test111/
Read 66983 from http://192.168.137.3:9000/test222/
Read 66496 from http://192.168.137.3:9000/test333/
Download 3 sites in 18.260805818950757 seconds

real 0m18.432s
user 0m0.161s
sys 0m0.023s
node2:/root/python/20200525#


接着我們再來看,多線程版本的代碼實現:

node2:/root/python/20200525#cat t700.py

import concurrent.futures
import requests
import threading
import time

def download_one(url):
    resp = requests.get(url)
    print('Read {} from {}'.format(len(resp.content), url))


def download_all(sites):
    with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
        executor.map(download_one, sites)

def main():
    sites = [
    'http://192.168.137.3:9000/test111/',
    'http://192.168.137.3:9000/test222/',
    'http://192.168.137.3:9000/test333/'
    ]
    start_time = time.perf_counter()
    download_all(sites)
    end_time = time.perf_counter()
    print('Download {} sites in {} seconds'.format(len(sites), end_time - start_time))

if __name__ == '__main__':
    main()

node2:/root/python/20200525#time python3 t700.py
Read 75915 from http://192.168.137.3:9000/test111/
Read 66983 from http://192.168.137.3:9000/test222/
Read 66468 from http://192.168.137.3:9000/test333/
Download 3 sites in 7.2133595428895205 seconds

real 0m7.385s
user 0m0.151s
sys 0m0.146s

我們具體來看這段代碼,它是多線程版本和單線程版的主要區別所在:


   with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
        executor.map(download_one, sites)
這裏我們創建了一個線程池,總共有 5 個線程可以分配使用。executer.map() 與前面所講的 Python 內置的 map() 函數類似,表示對 sites 中的每一個元素,

併發地調用函數 download_one()。



多進程:


with futures.ThreadPoolExecutor(workers) as executor
=>
with futures.ProcessPoolExecutor() as executor:



node2:/root/python/20200525#cat t800.py
import concurrent.futures
import requests
import threading
import time

def download_one(url):
    resp = requests.get(url)
    print('Read {} from {}'.format(len(resp.content), url))


def download_all(sites):
    with concurrent.futures.ProcessPoolExecutor() as executor:
        executor.map(download_one, sites)

def main():
    sites = [
    'http://192.168.137.3:9000/test111/',
    'http://192.168.137.3:9000/test222/',
    'http://192.168.137.3:9000/test333/'
    ]
    start_time = time.perf_counter()
    download_all(sites)
    end_time = time.perf_counter()
    print('Download {} sites in {} seconds'.format(len(sites), end_time - start_time))

if __name__ == '__main__':
    main()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章