ä»åã¯ãã«ãã¹ã¬ããã«ã€ããŠæ±ããŸãããã«ãã¹ã¬ããã¯ãç°¡åã«èšã£ãŠããŸãã°è€æ°ã®åŠçãã䞊åãã«é²ããããšãã§ãããã®ã§ãããã«ãã¹ã¬ããã®å察ãã·ã³ã°ã«ã¹ã¬ããã§ãããããã¯è€æ°ã®åŠçãé çªã«é²ããŠãããã®ã§ããéã«èšãã°ãããåŠçãçµãããŸã§ã¯æ¬¡ã®åŠçã宿œããããšã¯ã§ããŸããããã«ãã¹ã¬ããããã³ã·ã³ã°ã«ã¹ã¬ããã®âã¹ã¬ããâã¯ãããã°ã©ã ã®å®è¡åäœãã®ããšã§ãååãããããããã«ãã«ãã¹ã¬ããã¯ããã°ã©ã ããã«ããªå®è¡åäœã§å®è¡ããŸãã
ä»åã®æµããšããŠã¯ããŸãæåã«ããã°ã©ã ã®å®è¡æéã®æž¬å®ææ³ã«ã€ããŠåŠã³ãŸãããããçè§£ããŠããªããšãã«ãã¹ã¬ããã䜿ã£ãé«éåãã©ãã»ã©å¹æçãªãã®ãçè§£ãã¥ããããã§ããæ¬¡ã«ããŸããŸãªåŠçã«ãããé å»¶ãã©ãã»ã©ã®ãã®ãã«ã€ããŠåŠã³ãŸãããããã®åºç€ãã§ããããã§ãã·ã³ã°ã«ã¹ã¬ããã®åé¡ç¹ã«ã€ããŠããã®æ¬¡ã«ãã«ãã¹ã¬ãããã©ã®ããã«ãã®åé¡ãå æãããã«ã€ããŠæ±ããŸãããããŠå®éã«Pythonã§ã©ã®ããã«ã€ããŠãã«ãã¹ã¬ããã䜿ãããåŠã³ãæåŸã«ãã«ãã¹ã¬ããç¹æã®åé¡ç¹ã«ã€ããŠåŠã³ãŸãã
ãªããä»åãå 容ãå€ããªã£ããååŸç·šã«åããŸããä»åã¯ç°¡åãªãã«ãã¹ã¬ããã®äœ¿ãæ¹ã次åã¯çºå±å 容ãšãªããŸãã
ããã°ã©ã éåºŠã®æž¬å®æ¹æ³
ãã«ãã¹ã¬ããã䜿ãã¡ãªããã®ã²ãšã€ã«é å»¶(å®è¡é床ãé ã)ã®åé¡ãåé¿ã§ããå¯èœæ§ããããšãããã®ããããŸãããã åã«ãã«ãã¹ã¬ããã®äœ¿ãæ¹ã®èª¬æãããããããå®éã«ããã°ã©ã ã®é床ãèšæž¬ããªããã©ã®ããã«ããŠåŠçé床ãåäžããããäœéšããŠããããããšèããŠããŸãããã®ããããŸãæåã«ããã°ã©ã ã®å®è¡é床ã®èšæž¬æ¹æ³ã«ã€ããŠæ±ããŸãããªããéåºŠã®æž¬å®ããã¡ããšå®æœãããå Žåã¯ãä»åæ±ããããªç°¡æçãªæ¹æ³ã§ã¯ãªããå°çšã®ãã¡ããšããããã±ãŒãžã䜿ã£ãã»ãããããããããŸããã
ä»åå©çšããæž¬å®æ¹æ³ã¯ç°¡åã«èšããšã
çŸåšã®æå»ãååŸ
åŠç
å
ã®æå»ãšçŸåšã®æå»ã®å·®åãååŸ
ãšããæ¹æ³ã§è¡ããŸãããã®ããã«ããããšã§ãäžèšã®ãåŠçãã«ããã£ãæéãæž¬å®ã§ããŸããçŸåšã®æå»ã®ååŸæ¹æ³ã¯timeã¢ãžã¥ãŒã«ã®time()颿°ã䜿ããŸããç°¡åã«ã§ããããµã³ãã«ã詊ããŠã¿ãŸãããã
import time
time_before = time.time()
time.sleep(5)
time_after = time.time()
time_elapsed = time_after - time_before
print(time_elapsed)
æåãªã®ã§å°ãåé·ã«æžããŠããŸãããããã»ã©é£ãããªãã§ãããäžèšã ãštime.sleep()颿°ã§5ç§éãããšã¹ãªãŒããããŠããã®å®è¡éåºŠãæ±ããŠããŸãããããå®è¡ãããšç§ã®ç°å¢ã§ã¯ä»¥äžã®ããã«ãªããŸããã
# python test.py
5.00498509407
ã¹ãªãŒããã5ç§ã ãã§ãªãããæéã®ååŸåŠçããã®ä»ãã«ãããæéãå«ãŸããŸãã®ã§ããžã£ã¹ã5ç§ã«ã¯ãªã£ãŠããŸããããŸããã ããã5ç§ãªã®ã§OKã§ããããä»åŸã¯ãã®æ¹æ³ã§æéã®æž¬å®ãããŠãããŸãã
ããŸããŸãªåŠçã®é床ãšé å»¶
å çšã¯sleep颿°ã®å®è¡é床ãèšæž¬ããŸãããã»ãã®åŠçã¯ããã»ã©ç°¡åã«å®è¡æéãæšæž¬ããããšã¯ã§ããŸããããããã°ã©ã ã®åŠçé床ã¯ãã®åŠçå 容ã«å¿ããŠãããæéã«ããçšåºŠã®åŸåããããŸãããã«ãã¹ã¬ããã䜿ãå Žåã¯ããã®æšæž¬ãããåŠçæéã«æèãé ãå¿ èŠãããã®ã§ãç°¡åã«ã§ã¯ãããŸãããããŸããŸãªåŠçã®å®è¡é床ãèšæž¬ããŠã¿ãããšæããŸãã
ãŸããä»åã®é 延枬å®ã®ã³ãŒãã®ããŒã¹ãšãªããäœãé ãåå ã®ãªãããã°ã©ã ãã®æž¬å®ãããŠã¿ãŸãã
import time
sum_value = 0
current_time = time.time()
for i in range(0, 10000):
None
print(time.time() - current_time)
ã«ãŒãåã®äžãNone(åŠçãããªã)ãšãªã£ãŠããã®ã§ããã åã«ã«ãŒããåããŠããã ãã§ãããã®å®å¹é床ã¯ä»¥äžã®ããã«ãªããŸããã
# python test.py
0.000504970550537
0.5ããªç§ã§ãããæ¬¡ã«ã«ãŒãåŠçã®äžã§åèšå€sum_valueãæ±ããåŠçãæžããŠã¿ãŸããèŠããã«è¶³ãç®ã«ãããåŠçæéã远å ãããŸãã
import time
sum_value = 0
current_time = time.time()
for i in range(0, 10000):
sum_value += i
print(time.time() - current_time)
Noneã ã£ããšãããå€ãã£ãŠããŸããããã以å€ã¯ãŸã£ããåãã§ãããã®å®è¡é床ã¯0.000903129577637ãšãªã£ãŠããã®ã§ãçŽ1ããªç§ãšåŠçã«ãããæéã¯ãªãªãžãã«ã®2åçšåºŠã«ãªã£ãŠããŸãã
次ã«printæã§åèšå€ãåºåããããã«ããŠã¿ãŸããããã¯ãç»é¢ãžã®åºååŠçãã«ãããæéã远å ããããšããããšã§ãã
import time
sum_value = 0
current_time = time.time()
for i in range(0, 10000):
sum_value += i
print(sum_value)
print(time.time() - current_time)
ãã®å®è¡é床ã¯ç§ã®ç°å¢ã§ã¯0.027067899704ãšãªããŸããããªãªãžãã«ã®ã«ãŒãããã ãã®ã³ãŒãã«æ¯ã¹ããšåŠçæéãçŽ54åãšãªã£ãŠããŸããè¶³ãç®ã«æ¯ã¹ãŠåŠçæéãäžæ°ã«è·³ãäžãããŸãããã
ãããŸã§ããŸãšãããšã以äžã®ãããªããšãããããŸãã
- è¶³ãç®ã¯éåºŠãæ©ã
- printæã«ããç»é¢åºåã¯é ã
ãã®åŠçé床ã®éãã¯ãªãã ãšæããŸãã? çãã¯ç°¡åã§ãè¶³ãç®ã¯ãCPUãšã¡ã¢ãªãã®åŠçã§ãããprintæã¯ãç»é¢åºåãšããIOåŠçããšãããšããã§ããPythonã§åŠçãæžãå Žåããã®å®å¹é床ã¯ä»¥äžã®å³ã®ãããªåŸåããããŸãã
Pythonã§æžããŠãçŽæ¥Cã§å®è¡ãããå Žåãšã€ã³ã¿ããªã¿ã§è§£éãããŠå®è¡ãããå ŽåããããŸããåè ã®ã»ããåœç¶éãã®ã§ãããã©ãããå Žåã«Cãèµ°ãããç¥ã£ãŠããªããšäœ¿ãããªããªãã®ã§ãåå¿è ã¯ãããŸã§äž¡è ãåºå¥ããå¿ èŠããªãã§ãã
ãã ãå³ã®éè²ã®åŠçã¯äž»ã«CPUãšã¡ã¢ãªã ãã§å®è¡ãããã®ã«å¯ŸããŠããªã¬ã³ãžã®åŠçã¯ãããäœéã§ããã»ãã®è£ 眮ããé¢ãã£ãŠããã®ã§å®è¡æéãã¬ã¯ã³ãšèœã¡ããšããããšã¯ç¥ã£ãŠããå¿ èŠããããŸããprintæãç»é¢åºåãé¢ãã£ãŠããã®ã§ãå®è¡é床ãèœã¡ãã®ã§ããã
ããŠã次ã¯ãã£ã¹ã¯ã¢ã¯ã»ã¹ããããŠã¿ãŸãããªããç§ã®ç°å¢ã¯SSDãªã®ã§ãããHDDã ãšå®è¡é床ããããããå€§å¹ ã«èœã¡ãå¯èœæ§ããããŸãããŸãããã£ã¹ã¯ã¢ã¯ã»ã¹ã¯æé©åãèµ°ããããåŠçå 容ãªã®ã§ãåãã³ãŒãã§ãPythonã®ããŒãžã§ã³ãOSã«ãã£ãŠãåŠçé床ã倧ããå€ããå¯èœæ§ããããŸãã
ããã°ã©ã ã¯ä»¥äžã®ããã«ãªããŸãããŸãããã¡ã€ã«ããªãŒãã³ããŠãããã«ã«ãŒãã§é£ç¶ã§è¿œèšãè¡ããæåŸã«ã¯ããŒãºããããšããã³ãŒãã§ãã
import time
sum_value = 0
current_time = time.time()
f = open('/Users/yuichi/Desktop/a.txt', 'a')
for i in range(0, 10000):
sum_value += i
f.write(str(sum_value) + '\n')
f.close()
print(time.time() - current_time)
ãã®å®è¡é床ã¯å çšã®printæãããæ©ãã0.00518202781677ãšãªããŸãããã«ãŒãå ã§ã®è¶³ãç®ã ãã®ã³ãŒãã«æ¯ã¹ã6åã»ã©ã®å®è¡æéãããã£ãŠãããã®ã®ãprintæãããã¯ã ãã¶éãã§ããããã ãå ã«èšã£ãããã«SSDã§ã¯ãªãHDDã ãšãã£ãšé床ãé ããªãå¯èœæ§ãé«ãã§ããããã¯SSDãã©ã³ãã ã¢ã¯ã»ã¹ã«åŒ·ãã®ã«å¯ŸããŠãHDDã¯å転ãããã£ã¹ã¯ãšç§»åããããããšããæ§æãªã®ã§ãé£ã³é£ã³ã®ããŒã¿ãèªãã ãæžãããããåäœãé ãããã§ã(ããããæžã蟌ã¿åŠçã¯æé©åã§ãããã¡ãªã³ã°ããããšæãã®ã§ãä»åã®ãããªäœ¿ãæ¹ãªãHDDã§ãããã»ã©é ããªãæ°ãããŸã)ã
ãªãããã¡ã€ã«ã®ãªãŒãã³ã»ã¯ããŒãºãforæã®äžã§è¡ããšå®è¡æéã¯0.567183971405ãšãªããŸãããããããããã¡ã€ã«ã«æžã蟌ãåŠçããããããã¡ã€ã«ã®ãªãŒãã³ã»ã¯ããŒãºåŠçãã®ã»ããããã¶ãæéããããããšãããããŸãããããããããã«éåºŠãæ€èšŒãããšæžã蟌ããã³ã«ãªãŒãã³ã»ã¯ããŒãºãããããããªãŒãã³ãããã¡ã€ã«ã«é£ç¶ã§æžã蟌ãã»ãããããšããããšãããã£ãŠãããšæããŸããæ€èšŒã¯å€§äºã§ãã
æ¬¡ã«æ©åšå€ãžã®ãããã¯ãŒã¯ãçµç±ããã¢ã¯ã»ã¹ã詊ããŠã¿ãŸããå ·äœçã«ã¯å€ã«ããŒã¿ãéã£ãããåã£ãŠããããšãã£ãåŠçã§ããPythonã ãšæ®éã¯TCP/IPãããã¯ãŒã¯ã®å©çšã ããããã«è©²åœãããšæããŸãããµã³ãã«ã³ãŒãã¯ããŸããŸãªæåãªWebãµã€ãã®ãããããŒãžã®HTMLãååŸãããšãããã®ã§ãã
import time, urllib2
current_time = time.time()
urls = ['http://www.google.com', 'http://www.yahoo.co.jp/', 'https://www.bing.com/']
for url in urls:
response = urllib2.urlopen(url)
html = response.read()
print(time.time() - current_time)
urllib2ãšããã©ã€ãã©ãªã䜿ã£ãŠãæå®ãããããŒãžãéããŠHTMLãååŸããŠããŸãããã®å®è¡é床ã¯ç§ã®ç°å¢(æºåž¯ã®åç·)ã§ã¯0.623227119446ãšãªããŸããããã£ã3ã«ãŒãããã ãã§0.6 ç§ããã£ãŠããŸããã1äžã«ãŒãããããŸã§ããªãäœéãªããšãããããŸããããçšåºŠå¯ãã¯ã€ãããšæããŸããããªãããã»ã©åŠçã«æéãããããã¯æ¬¡ã«è¿°ã¹ãŸãã
ãã«ãã¹ã¬ããã®åºæ¬
ä»ãŸã§ã®è©±ãéããŠãåŠçã«ãã£ãŠãããæéã«éããããããšãããããŸãããåé¡ãªã®ã¯ãããã¯ãŒã¯ã¢ã¯ã»ã¹ã®ãããªãæéããããåŠçããé ã«å®æœãããšãåèšã®åŠçæéãé·ããªã£ãŠããŸãããšã§ãããå ã»ã©ã®HTMLååŸã®äŸã¯ä»¥äžã®å³ã®ãããªã€ã¡ãŒãžã§ãã
ãã ãããèããŠã¿ãŠãã ããããããµã€ãããHTMLãååŸããéã«ããã®ãªã¯ãšã¹ãããããã¹ã(PythonãåãããŠããPC)ã¯äœãããããšãããšä»¥äžã®ãšããã§ãã
- ãªã¯ãšã¹ãããã
- ã¬ã¹ãã³ã¹ãåŸ ã€
- ã¬ã¹ãã³ã¹ãåãã
2çªç®ã®åŠçã¯äžèšå³ã®ãHTTP Request (1) + ãµãŒããŒåŠç(2) + HTTP Response (3) ããšãªããŸãããã®éã¯ãã åŸ ã£ãŠããã ãã§ãã®ã§ãèŠããã«Pythonã®ããã°ã©ã ãåãããŠãããã¹ãã¯ãæéã ã䜿ã£ãŠãããäœãããŠããªããç¶æ ã§ãã3ã€ã®ãµã€ãããHTMLãååŸãããšããããšã¯ããã®äœãããªãåŸ ã¡ç¶æ ã®åŠçã3åç¹°ãè¿ããŸãã
ãã®æéã®ç¡é§é£ãã¯ãããçšåºŠã¯è§£æ¶ã§ããŸããã©ããåŸ ã€ã®ã§ããã°ã以äžã®å³ã®ããã«é£ç¶ã§äžŠåã«ãªã¯ãšã¹ããããŠããŸãã°ããã®ã§ãããããããšåŠçæéã¯ãååŠç(HTMLååŸ)ã®åèšå€ãã§ã¯ãªãããæé·ãšãªã£ãåŠçã®æéããšãªããŸãã ãããå®çŸããã®ããã«ãã¹ã¬ãããšåŒã°ããæ©èœã§ãã
ãã«ãã¹ã¬ããã䜿ãããšã§ãæ¬æ¥ã¯ããã°ã©ã ãåŸ ã¡ã«ãªã£ãŠããŸãç®æã§å¥ã®åŠçãå®è¡ããããšãå¯èœãªãããCPU ã®èšç®è³æºãããæå¹ã«æŽ»çšããããšãã§ããŸããããã¯ãªã«ãèšç®è³æºã®ç¯çŽã®ããã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³ããµãŒãã¹ã®ãŠãŒã¶ããªãã£ã®åäžãã¬ã¹ãã³ã¹æéã®ççž®ã«ãå©çšããããšãã§ããŸãã
å°ã説æãããŸããããšãã°ããGUIã®ããã°ã©ã ããããšããŸããããããããããã«ãã¹ã¬ããã䜿ããã«åããŠãããšããã°ãããéããåŠçãGUIã§å®è¡ãããšããã®éã¯ã»ãã®åŠçã忢ããŠããŸããŸããGUIã®æäœãåãä»ããããªããªããèŠãç®ã®ã¢ããããŒãããããªããªãã®ã§ã¢ããªã±ãŒã·ã§ã³ãããªãŒãºããŠããŸã£ãããã«èŠããã¯ãã§ããäžæ¹ããã«ãã¹ã¬ããã§ãã®éããåŠçãå®è¡ããã°ãéããåŠçãå®è¡ããŠãããã®ã®ã¢ããªã±ãŒã·ã§ã³ã¯å®è¡å¯èœ(GUIã®èŠãç®ãã¢ããããŒãå¯èœ)ã§ãã
ã»ãã®äŸãšããŠã¯è€æ°ã®ãã¹ãããäŸé ŒãåãããµãŒãããã°ã©ã ããããããŸãããã®ãµãŒããŒããã°ã©ã ãã·ã³ã°ã«ã¹ã¬ããã ãšããããã¹ãããåŠçã®ãªã¯ãšã¹ããåããŠãããã®ã¬ã¹ãã³ã¹ãè¿ããŸã§ã¯ãå¥ã®ãã¹ãããã®ãªã¯ãšã¹ããæ¥ããšããŠãåŠçã§ããåŸ ãããããšã«ãªããŸããäžæ¹ããã«ãã¹ã¬ããã«ããã°ãããªã¯ãšã¹ãã®å®è¡äžã§ãã£ãŠããå¥ã®ãªã¯ãšã¹ããåããããšãå¯èœã«ãªããŸãããã®ããè€æ°ã®ãªã¯ãšã¹ããåæã«ããªãããšãå¯èœã«ãªããŸãã
ãã«ãã¹ã¬ããã®éç
ãã«ãã¹ã¬ãããäžèœããšãããšå¿ ãããããã§ã¯ãããŸããããªããªããã«ãã¹ã¬ããã¯èšç®è³æºããåããã£ãŠäœ¿ããã ãã§ãããèšç®è³æºãã®ãã®ãå€ã䜿ããããã§ã¯ãªãããã§ããããšãã°ã䜿çšããŠããPCã§CPUã100%ç¶æ ã§ãã«æŽ»çšããã°ã¿ã¹ã¯Aã10ç§ãã¿ã¹ã¯Bã10ç§ã§çµãããããããšããŸãããã®ãšãããã«ãã¹ã¬ããã䜿ããšã¿ã¹ã¯Aãšã¿ã¹ã¯Bãåæã«å®è¡ã§ãããã®ã®ãããããã«ãããæéã20ç§ã«å¢ããŠããŸããŸãã
ããšãã°ããã°ã©ã ã®åŠçãCPUã100%䜿ãåãå Žåãè€æ°ã®åŠçã䞊åã«å®è¡ããããšã¯ã§ããŠãããã®åèšåŠçæéã¯ã·ã³ã°ã«ã¹ã¬ãããšçè«äžã¯å€ãããŸãããããã¯åŠçAãšåŠçBãåæã«å®è¡ããå ŽåãAãšBã¯èšç®è³æºãåããã£ãŠããŸãã®ã§ãããã®åŠçãçµããã®ã«å¿ èŠãªæéã䌞ã³ãŠããŸãããã§ãããã®ã€ã¡ãŒãžå³ã以äžã«èšèŒããŸãã
ãã®ãããäœã«èµ·å ããŠåŠçã«é å»¶ãçºçããŠããã®ãææ¡ããããã§ãã«ãã¹ã¬ããã䜿ãããšãæãŸããã§ããæšä»ã¯CPUã¯ãã«ãã³ã¢ã«ãªã£ãŠããã®ã§ãCPUäŸåã®ããã°ã©ã ã§ãã£ãŠãã·ã³ã°ã«ã¹ã¬ããã ãšã³ã¢ãã²ãšã€ãã䜿ããªãã£ããããã«ãã¹ã¬ãããªãã³ã¢ã2ã€ä»¥äžäœ¿ããŠé«éåãããšããã·ããªãªã¯ããã§ããããã
ããã°ã©ã ãè€éåãããšãã以å€ã«ãã«ãã¹ã¬ããã䜿ããã¡ãªããã¯ããã»ã©å€ããªãã®ã§ãæéããããåŠçãååšãããšããã£ãŠããã°ãæåãããã«ãã¹ã¬ããã念é ã«å ¥ããŠèšèšããŠã¿ãŠããããããããŸãããã
Pythonã§ã®ãã«ãã¹ã¬ããã®å©çš
Pythonã§ãã«ãã¹ã¬ãããäœ¿ãæ¹æ³ã¯äž»ã«2ã€ããã®ã§ããããŸãããã颿°ã®åŠçããã«ãã¹ã¬ãããšããŠåŒã³åºãããšããæ¹æ³ã«ã€ããŠæ±ããŸãã
ãã£ãããªã®ã§ããããµã³ãã«ã³ãŒããæžããŠã¿ãŸããã€ã³ããŒãããŠããthredingã¢ãžã¥ãŒã«ã®Threadã¯ã©ã¹ã«çç®ããŠãã ããã
import threading, time
def prints(name, sleep_time):
for i in range(10):
print(name + ': ' + str(i))
time.sleep(sleep_time)
thread1 = threading.Thread(target=prints, args=('A', 1,)) # Initialize
thread2 = threading.Thread(target=prints, args=('B', 1,))
thread1.start() # Start
thread2.start()
ãããå®è¡ãããšä»¥äžã®ããã«ãªããŸãã
python test.py
A: 0
B: 0
A: 1
B: 1
A: 2
B: 2
ãŸããäžèšã®ããã°ã©ã ã§ã¯def printsã«ãŠæå®ãããç§ããšã«ã«ãŒããåããŠã¡ãã»ãŒãžãåºåããã颿°ããå®çŸ©ãããŠããŸãããã®é¢æ°ããã«ãã¹ã¬ããåããåŠçã®å¯Ÿè±¡ã§ããInitializeãšã³ã¡ã³ããããŠããç®æã§ããã®printsãthredingã¢ãžã¥ãŒã«ã®Threadã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ã«é¢æ°printsã®åŒæ°ãšãšãã«äžããŠããŸãããªããäžããåŒæ°ã«ã€ããŠã¯ã¿ãã«ãšããŠãŸãšããŠããŸã(ã¿ãã«ã®æåŸã« , ããããŠããã®ã¯ã¿ãã«ã®èŠçŽ ãã²ãšã€ã®ãšãã§ãå¿ ãã¿ãã«åã«ãªãããã«ãããã)ãããã¯ã¿ãã«ã§ã¯ãªãããªã¹ãã§ãããŸããŸãããprints颿°ãprints('A', 1)ãšããŠãã«ãã¹ã¬ãããšããŠåŒã³åºããããªã€ã¡ãŒãžã§ãã
ãããŠæåŸã«äœæãããã€ã³ã¹ã¿ã³ã¹ã®startã¡ãœããã§ãã«ãã¹ã¬ãããšããŠäžŠåã«å®è¡ãããŠããŸãããããåŒã³åºããšæ°ããã¹ã¬ãããéå§ããŠãããã«æ¬¡ã®è¡ã®å®è¡ã«ç§»ããŸãã
prints颿°ãèŠãŠããããšãããããã«ãéåžžã©ããã·ã³ã°ã«ã¹ã¬ããã§åŒã³åºããŠããã°ããŸãåŒæ°A,1ã§åŒã³åºãããã®prints颿°ã®åŒã³åºãããçµäºããããå床B,1ã§åŒã³åºããšããåããããŸããåºåãšããŠã¯ã
A: 0
A: 1
âŠ
A: 8
A: 9
B: 0
B: 1
âŠ
B: 8
B: 9
ãšãªããŸããããã ããã«ãã¹ã¬ããã®åºåãèŠãŠããããšãããããã«ã1åç®ã®é¢æ°åŒã³åºãã«ããåºåãš2åç®ã®é¢æ°åŒã³åºãã«ããåºåãæ··ãã£ãŠåºåãããŠããããšãããããŸããããã¯ã€ãŸãã1åç®ã®é¢æ°åŒã³åºããå®è¡ããŠããæäžã«2ã€ãã®é¢æ°åŒã³åºããå®è¡ãããŠãããšããããšã§ããäž¡è ã®éããçµµã«ãŸãšããŸãã
ã¹ã¬ãããçµäºãããŸã§åŸ æ©ããæ¹æ³
è€æ°ã®ã¹ã¬ããã飿ºããŠåäœããå Žåã¯ãã¹ã¬ããAã¯ã¹ã¬ããBã®çµæãå©çšããããªã©ãšãã£ãäœ¿ãæ¹ãããããšããããŸãããã®å Žåãã¹ã¬ããAã¯ã¹ã¬ããBãçµãããŸã§ãåŸ ã€ãå¿ èŠããããŸãã
ããã¹ã¬ãããçµãããŸã§åŸ æ©ããã«ã¯ããã®ã¹ã¬ããã®ã€ã³ã¹ã¿ã³ã¹ã®joinã¡ãœãããåŒã³åºãå¿ èŠããããŸããå¥ã®èšãæ¹ããããšãjoinã¡ãœããã®ãåŒã³åºãå ãã¯ãjoinã¡ãœããã®ã€ã³ã¹ã¿ã³ã¹ãã®startã¡ãœããã§åŒã³åºãããã¹ã¬ããåŠçãçµäºãããŸã§ã¯joinã¡ãœãããåŒã³åºããç®æã§åŸ ã¡ç¶æ ã«ãªããŸãã
ããšãã°å çšã®ã³ãŒããå°ãå€ããŠã
thread1.start()
thread1.join() # WAIT HERE
thread2.start()
ãšãããšãthread1ãçµäºãããŸã§thread1.join()ã®ç®æã§åŸ æ©ãããããthread2.start()ã¯ããã«ã¯å®è¡ãããŸãããçµæãšããŠprintåºåã¯ã·ã³ã°ã«ã¹ã¬ããã®ãšããšåããã®ã«ãªããŸãããã®ãã¹ã¬ããã®åŸ ã¡ãã䜿ã£ãŠã以äžã®ããã«ãåºæ¬ã¯ã·ã³ã°ã«ã¹ã¬ããã ããç¹å®ã®ã¿ã€ãã³ã°ã®ã¿ã§è€æ°ã®åŠçãèµ°ãããããšããæ¹æ³ã¯ ãã䜿ãããææ³ã§ãã
è€æ°ã®æéããããåŠçãå®è¡ããå¿ èŠãããå Žåã¯ããããé ã«å®æœãããããããã®ããã«äžŠåã«å®è¡ããã»ããå®è¡æéãçããŠãã¿ãŸãã
ãã®ææ³ã䜿ã£ãŠãå ã»ã©ã®è€æ°ã®WebããŒãžãããããããŒãžã®HTMLãååŸããããã°ã©ã ãé«éåããŠã¿ãŸããã³ã¡ã³ãã§Start Threadsãšãªã£ãŠããç®æã§å³ã®åŠç2ãéå§ããWait Threadsãšã³ã¡ã³ãããŠããç®æã§åŠç2ãåŸ æ©ããŠããŸããThreadã®ã€ã³ã¹ã¿ã³ã¹ãäœã£ãã¿ã€ãã³ã°ã§ãªã¹ãã«æ ŒçŽããåŸ ã€å Žæã§ããããã¹ãŠã«å¯ŸããŠjoinãåŒã³åºããšããæ¹æ³ã§ãã¹ãŠã®ã¹ã¬ãããçµäºãããŸã§åŸ æ©ãããŠããŸãã
import threading, time, urllib2
def get_html(url):
current_time = time.time()
response = urllib2.urlopen(url)
html = response.read()
print(url + ': ' + str(time.time() - current_time))
urls = ['http://www.google.com', 'http://www.yahoo.co.jp/', 'https://www.bing.com/']
threads = []
# Start Threads
current_time = time.time()
for url in urls:
thread = threading.Thread(target=get_html, args=(url,))
thread.start()
threads.append(thread)
# Wait Threads
for thread in threads:
thread.join()
print('Time: ' + str(time.time() - current_time))
ãããå®è¡ãããšä»¥äžã®ããã«ãªããŸããã
http://www.yahoo.co.jp/: 0.322998046875
https://www.bing.com/: 0.402767896652
http://www.google.com: 0.848864078522
Time: 0.849572896957
ä»ãŸã§ã¯çŽ1.6ç§ããã£ãŠãããã®ããçŽååã®æéã«ãªããŸãããããã«ãã¹ã¬ããã䜿ãããšã§ããã°ã©ã ã®å®è¡é床ãå€§å¹ ã«åäžããŸããã
ãã¹ãŠã®ã¹ã¬ããã®åŠçãçµãããŸã§joinã®ã«ãŒãã§åŸ ã¡ãŸãã®ã§ãããã°ã©ã ã®å®è¡æéã¯äžçªååŸã«æéãããã£ããµã€ãã«äŸåããŠããŸããè¡šç€ºçµæãèŠãéããä»åã¯googleã®ããŒãžã®ååŸã«äžçªæéãããããããã°ã©ã ã®å®è¡æéã¯googleã®ããŒãžã®ååŸæéãšã»ãŒåãã«ãªã£ãŠããŸããã
ä»åã¯3ã€ã®ãµã€ãã ãã§ããããããã10ã20ãªã©ã«ãªã£ãŠãããšãã广çã«ãªããŸãããã ããããã¯ãŒã¯ã®åž¯åå¹ ãªã©ãããã«ããã¯ã«ãªãã ããšã¹ã¬ããã䜿ã£ãŠã解決ã§ããªããªãå¯èœæ§ããããŸãããã®ãšãã¯threadpoolãªã©ã®ãã¯ããã¯ã䜿ã£ãŠç¹å®åæ°ã®ã¹ã¬ããã䜿ããŸããããããã®ã§ãããå ¥éã¬ãã«ãè¶ ããã®ã§å²æããŸãã
次åããã«ãã¹ã¬ããåŠçã«ã€ããŠè§£èª¬ããŠãããŸããã¯ã©ã¹ã®ç¶æ¿ã«ãããã«ãã¹ã¬ããã®å®çŸãããã«ãã¹ã¬ããç¹æã®é£ããããŸããã«ãã¹ã¬ãã以å€ã®äžŠååŠçã«ã€ããŠæ±ããŸãã
å·çè
玹ä»äŒè€è£äž(ITO Yuichi)ã·ã¹ã³ã·ã¹ãã ãºã§ã®æ¥åãšå€§åŠã§ã®ç 究掻åã§ã³ã³ãã¥ãŒã¿ãããã¯ãŒã¯ã«6幎é¢ãããå°éã¯L2/L3 Switching ãšããŒã¿ã»ã³ã¿ãŒé¢é£æè¡ããã³SDNãTACãšããŠã·ã¹ã³é¡§å®¢ã®ãã¯ãã«ã«ãµããŒãæ¥åã«åŸäºã瀟å åãã®ãœãããŠã§ã¢é¢é£ã®ãã¬ãŒãã³ã°ããã³ããŒã¿ã»ã³ã¿ãšSDNé¢ä¿ã®å€éšè¬æŒãªã©ãè¡ãã ããšããšä»®æ³ãããã¯ãŒã¯é¢é£æè¡ã®ç ç©¶éçºã«åŸäºããŠããããšãããããããã¯ãŒã¯ã ãã§ãªãããã°ã©ãã³ã°ãLinuxé¢é£æè¡ã«ã粟éãCisco瀟å å€åãã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°ããŒã«ã®éçºããè¶£å³ã§é³å£°åæåŠçã®ã¢ããªã±ãŒã·ã§ã³ããµãŒãã¹ãéçºã Cisco CCIE R&S, Red Hat Certified Engineer, Oracle Java Gold,2009幎床 IPA æªèžãããžã§ã¯ãæ¡æ 詳现(è±èª)ã¯ãã¡ã |
|---|





