ååã¯ãã«ãã¹ã¬ããã®æŠå¿µã®ç°¡åãªèª¬æãšãšãã«ãéåºŠã®æž¬å®æ¹æ³ãšãã«ãã¹ã¬ããã®ç°¡åãªå©ç𿹿³ã«ã€ããŠåŠã³ãŸãããä»åã¯ãã®çºå±ãšããŠãç¶æ¿ã«ãããã«ãã¹ã¬ããåãã®ã¯ã©ã¹ã®äœæãããã¯ã䜿ã£ãã¹ã¬ããéã®åæããã«ãã¹ã¬ãã以å€ã®äžŠååææ³ãšãã£ãå å®¹ãæ±ããŸãã
ç¶æ¿ã«ãããã«ãã¹ã¬ããã®å®çŸ
ååã¯thredingã¢ãžã¥ãŒã«ã®Threadã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ã«ãã«ãã¹ã¬ããåããã颿°ãšãã®åŒæ°ãæž¡ããšãã圢ã§ãã«ãã¹ã¬ãããå®çŸããŸããã
ãã®ã»ãã«ãThreadã¯ã©ã¹èªäœãç¶æ¿ããããšã§ãã«ãã¹ã¬ãããšããŠåäœãããã¯ã©ã¹ãäœæããŠäœ¿ãããšãã§ããŸããããã»ã©è€éã§ã¯ãªãã®ã§ããŸãã¯ã³ãŒããèŠãŠã¿ãŸãããã
import threading, time
# Class definition
class MyThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
for i in range(10):
print('MyThread: ' + str(i))
time.sleep(1)
# Run threads
mt = MyThread() # create thread instance
mt.start() # start the thread
for i in range(10):
print('Main: ' + str(i))
time.sleep(1)
ããã°ã©ã ã®ååãã¯ã©ã¹ã®å®çŸ©ã§ããã¯ã©ã¹åã®å®£èšç®æãèŠãŠããããšãããããã«ãthreadingã¢ãžã¥ãŒã«ã®Threadã¯ã©ã¹ãç¶æ¿ããŠããŸãããã®ã¯ã©ã¹ãç¶æ¿ããããšã§ããã«ãã¹ã¬ããã«å¿ èŠãªæ©èœããã®ã¯ã©ã¹ã«å ããããŸãã
ã³ã³ã¹ãã©ã¯ã¿ã®äžã§èŠªã¯ã©ã¹ã§ããThreadãåæåããŠããŸãããã®ãããã¯ãªããžã§ã¯ãæåã®ç¶æ¿ã®èšäºã«èšèŒããããŸãã®ã§äžå®ãªæ¹ã¯èŠãªãããŠãããŠãã ããããŸããæ¬¡ã®äŸã§æžããŸããã€ã³ã¹ã¿ã³ã¹å€æ°ã®åæåãªã©ãå¿ èŠã§ããã°è¡ã£ãŠãã ããã
éèŠãªã®ã¯ã³ã³ã¹ãã©ã¯ã¿ã®åŸã«ããrunã¡ãœããã®å®çŸ©ã§ããç°¡åã«èšã£ãŠããŸãã°runã¡ãœããã¯ãã«ãã¹ã¬ãããšããŠåŒã³åºãããåŠçãæžããã®ã§ãããæ£ç¢ºã«èšããšæ°ãã«äœãã®ã§ã¯ãªã芪ã¯ã©ã¹ã®ã¡ãœããããªãŒããŒã©ã€ã(äžæžã)ããŠããŸãã
ãã«ãã¹ã¬ããã®å®è¡ã¯ååãšã»ãšãã©åãããã¯ã©ã¹ãã€ã³ã¹ã¿ã³ã¹åããŠããã®startã¡ãœãããåŒã³åºããŸãããããšãã«ãã¹ã¬ãããšããŠå ã»ã©å®çŸ©ããrunã¡ãœãããå éšã§åŒã³åºãããŸãããªããstartã§ã¯ãªãrunã¡ãœããèªäœãåŒã³åºããšããã«ãã¹ã¬ããã§ã¯ãªãæ®éã®ã·ã³ã°ã«ã¹ã¬ãããšããŠå®è¡ãããã®ã§æ³šæããŠãã ããã
ãã«ãã¹ã¬ãããšããŠåäœãããåŠçã«åŒæ°ãæž¡ãããå Žåã¯ãã³ã³ã¹ãã©ã¯ã¿ãžã®åŒæ°ãçµç±ããŠæž¡ãã®ãç°¡åã§ããããšãã°ååã®åŒæ°ã䜿ããã«ãã¹ã¬ããã®ããã°ã©ã ãæžãçŽããšä»¥äžã®ããã«ãªããŸãã
import threading, time
class MyThread(threading.Thread):
def __init__(self, name, sleep_time):
threading.Thread.__init__(self)
self.name = name
self.sleep_time = sleep_time
def run(self):
for i in range(10):
print(self.name + ': ' + str(i))
time.sleep(self.sleep_time)
thread1 = MyThread('A', 1)
thread2 = MyThread('B', 1)
thread1.start()
thread2.start()
åŠçãå®çŸ©ãã颿°runèªäœã§ã¯ãªããã³ã³ã¹ãã©ã¯ã¿ã«åŒæ°ãæž¡ããŠããããã€ã³ã¹ã¿ã³ã¹å€æ°ãšããŠä¿æãããŠããŸãããããŠãããrunã¡ãœããã®äžã§å©çšããŠããããšãããããŸããããã®ãã«ãã¹ã¬ãã察å¿ã®ã¯ã©ã¹ãäœããšããææ³ã¯ãååã話ããã颿°ããã«ãã¹ã¬ããåããæ¹æ³ã«æ¯ã¹ãŠè€éãªããã°ã©ã ãæžããããå Žåãå€ãã§ããå°ãã³ãŒããé·ããªã£ãŠããŸãããšããããŸããããããªããžã§ã¯ãæåã«æ²¿ã£ãèšèšãããããã®ã§ç©æ¥µçã«äœ¿ã£ãŠãã ããã
ã¹ã¬ããã®åŠççµæã®ååŸ
ä»ãŸã§ã«ã話ãããã«ãã¹ã¬ããã§ã¯ãã¹ã¬ããããã ç«ã¡äžããŠåŠçãããã ãã§ããããã®ããã«ã¹ã¬ãããèµ°ãããã ãã§ããšãããå ŽåããããŸããããã¹ã¬ãããèµ°ãããŠããåŠçãè¡ãããã®çµæãååŸããããšããå Žåãå€ãã§ãã
ããåŠçããããçµæãååŸããã«ã¯ã颿°ã§ããã°returnæã§å®çŸå¯èœã§ãããã ãã¹ã¬ããã§ã¯ãããŸã§ãstart()ã¡ãœãããåŒã³åºãã ãã§ããããã®ãŸãŸå€ãreturnãããããšãã§ããŸããããã®ããããªãããã®å¥ã®æ¹æ³ã䜿ãå¿ èŠããããŸããããã«ã¯ããã€ãã®æ¹æ³ããããŸãããç°¡åãªãã®ã¯ç¶æ¿ããã¯ã©ã¹ã«ãè¿ãå€ãæ ŒçŽããã€ã³ã¹ã¿ã³ã¹å€æ°ãããå€ãååŸããããã®ã¡ãœããããå®çŸ©ããŠããããšãããã®ã§ãã
æ®éã®é¢æ°ã®å©çšã«ããè¿ãå€ã®ååŸãšããã«ãã¹ã¬ããå©çšæã®ååŸã®éãã以äžã®å³ã«ãŸãšããŸãã
ç°¡åãªäŸãéããŠç¢ºèªããŠã¿ãŸããããã¹ã¬ããã«æéããããåŠçããããŠããããçµãã£ãŠããåŠççµæãååŸãããšããããã°ã©ã ã§ããä»åã¯ãã£ããããæ°å(ããã°ã©ãã³ã°ã§ã¯æåãªãé¡ãªã®ã§ç¥ããªã人ã¯èª¿ã¹ãŠã¿ãŠãã ãã)ãæ±ãããã®ãšããŸãã
import threading, time
class MyThread(threading.Thread):
def __init__(self, count):
threading.Thread.__init__(self)
self.count = count
self.return_value = None # RETURN VALUE
def run(self):
sum_value = 0
for i in range(1, 1 + self.count):
sum_value += i
time.sleep(0.1)
self.return_value = sum_value # SET RETURN VALUE
def get_value(self): # GETTER METHOD
return self.return_value
thread1 = MyThread(5)
thread1.start()
thread1.join()
print(thread1.return_value) # 15
print(thread1.get_value()) # 15
äžèšã³ãŒãã®ã³ã¡ã³ãç®æãå€ååŸã®ãã€ã³ããšãªããŸãããŸããã³ã³ã¹ãã©ã¯ã¿ã«ãŠè¿ãå€ãæ ŒçŽããããã®ã€ã³ã¹ã¿ã³ã¹å€æ°ãå®çŸ©ãããŠããŸãããããŠãã«ãã¹ã¬ãããšããŠå®è¡ãããrunã¡ãœããå ã«ãŠãã®ã€ã³ã¿ã³ã¹å€æ°ã«å€ãæ ŒçŽãããŠããŸãã
ããšã¯ãã®ã€ã³ã¹ã¿ã³ã¹å€æ°ã"ã€ã³ã¹ã¿ã³ã¹.倿°"ãšããŠçŽæ¥åãåºããªããã¡ãœãããçµç±ããŠãšãã ããªãããŠããŸãããªããéèŠãªã®ã¯å€ãåãåºãåã«joinã¡ãœããã§ãã«ãã¹ã¬ãããçµãããŸã§åŸ ã£ãŠããããšã§ããjoinãåŒã³åºããªããšã察象ãšãªããã«ãã¡ãœããå ã§è¿ãå€ãåŸãããåã«ãã®å€ãåãåºãããšããŸããä»åã§ããã°Noneãåž°ã£ãŠããã¯ãã§ãã
ã€ã³ã¹ã¿ã³ã¹å€æ°ãçŽæ¥åãåºãã«ããã¡ãœããçµç±ã«ãããçµæã¯ã©ã¡ããåããªã®ã§ããããPythonã§ãã£ãŠã峿 Œãªã³ãŒããæžãããšããå Žå以å€ã¯åè ã§ååãªæ°ãããŸãã
ååå©çšããthreading.Threadã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ã«ãã«ãã¹ã¬ããåããã¡ãœãããæå®ããæ¹åŒã§ãè¿ãå€ãåŸãããšã¯å¯èœã§ãããã ããããããããšããã°äœããã®ã宿 ãã²ãšã€ãšãªããªããžã§ã¯ãããäž¡ã¹ã¬ããã§å ±æãããããçµç±ããŠå€ããããšããããªã©ã®ããŸããªããžã§ã¯ãæåããããã¬ã³ãŒãã«ãªãã®ã§ããŸããªã¹ã¹ã¡ã§ããªããããããŸããã
ããŸãç䌌ããŠã»ãããªãã®ã§ãããäžå¿ãµã³ãã«ã³ãŒããèšèŒããŸãã
import threading, time
def get_fibo(count, value_dict):
sum_value = 0
for i in range(1, 1 + count):
sum_value += i
time.sleep(0.1)
value_dict['fibo'] = sum_value # Set Return Value
value_dict = {} # Shared object (dict)
thread1 = threading.Thread(target=get_fibo, args=(5, value_dict,))
thread1.start()
thread1.join()
print(value_dict['fibo']) # 15
ä»åã¯èŸæžåã®ãªããžã§ã¯ããå©çšããŠããŸãããŸãèŸæžãªããžã§ã¯ããäœæããããããã«ãã¹ã¬ããåãã颿°ã«åŒæ°ãšããŠæž¡ããŸããããã¯Threadã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ã§ããã®ã§ãããããã«ãã¹ã¬ãããšããŠåäœãã颿°get_fiboå ã§ããã®åãåã£ããªããžã§ã¯ãã«å¯ŸããŠè¿ãå€ãæ ŒçŽããŠããŸãããããŠåŒã³åºãå ã§ãããååŸããŠããŸãã
æ°åãæååãšãã£ãåºæ¬ãšãªãåã¯å€æž¡ãã§ããããªã¹ããèŸæžååã³ã€ã³ã¹ã¿ã³ã¹ã¯åç §æž¡ãã«ãªããŸãã䜿ãããåãã©ã¡ãã«ãªããããããªãå Žåã¯å®éã«èªåã§ç¢ºãããŠã¿ãŠããããšæããŸãã
ãã«ãã¹ã¬ããç¹æã®åé¡
ã¹ã¬ããã®å®è¡èªäœã¯ç°¡åã§ãããé£ããã®ã¯ãè€æ°ã®ã¹ã¬ããéã§é£æºããšãããšãã§ãã鿬¡å®è¡(ãã«ãã¹ã¬ããã䜿ããªãéåžžã®ããã°ã©ãã³ã°ã¹ã¿ã€ã«)ã§ããã°ããããããã£ãŠããããã£ãŠããšåŠçãé ã§è¿œãããšã¯å¯èœã§ãããããã€ãã®åŠçãåæã«èµ°ããšãªããšãã©ã®ãããªåŠçãå®éã«è¡ãããŠãããæ³åããããšãé£ãããªããŸããã¹ã¬ããéã®é£æºã®ãã¹ããã©ã¯ãã£ã¹ãªã©ãããã®ã§ãããæ¬é£èŒã§ã¯ãããŸã§æ·±å ¥ãããã«ç°¡åãªæŠå¿µãææ³ã«ã€ããŠã®ã¿æ±ããŸãã
ãã«ãã¹ã¬ããã®é£ãããç°¡åãªäŸããããŠèª¬æããããšæããŸãããŸãã¯ãããããããªãœãŒã¹ã®ç«¶åã®åé¡ã«ã€ããŠæ±ããŸããããšãã°ããããªãœãŒã¹Xãã¹ã¬ããAãšã¹ã¬ããBããå©çšããŠãããšããŸããããå ·äœçã«ã¯ãåºã®åšåº«ç®¡çã®ããŒã¿Xãã·ã¹ãã A(å®åºè)ãšã·ã¹ãã B(ãªã³ã©ã€ã³ã¹ãã¢)ããæäœããŠãããšããŸãããã®ã·ã¹ãã AãBããããããã«ãã¹ã¬ããã ãšèããŠãã ãããæ¬æ¥ã¯ãã«ãã¹ã¬ãããšããããã¯ããŒã¿ããŒã¹ã®ãã©ã³ã¶ã¯ã·ã§ã³ãªã®ã§ãããæ¬è³ªã¯åãã§ãã
ãã®ãšããããååXãåºèãšãªã³ã©ã€ã³ã¹ãã¢ã§åæã«è³Œå ¥ããå Žåã«ãªãœãŒã¹ç«¶åã®å¯ŸçãããŠããªããã°ã管çãããŠããåšåº«æ°ã«äžæŽåãçºçããå¯èœæ§ããããŸãã以äžã®å³ã¯äžæŽåãçºçãããŸã§ã®åŠçã®æµããšãªããŸãã
å³ãäžããäžã«æç³»åã«è¿œã£ãŠã¿ãŸãããŸããååXã®åšåº«ã4ãããšããŸããããåºèã§ã客ããããããè³Œå ¥ããå Žåãå®åºèã®ã·ã¹ãã Aãåšåº«æ°ãèªã¿åãããã®å€ããã²ãšã€åŒãã3ãæ°ããåšåº«æ°ãšããŠç»é²ããŸãããã ããã®ã·ã¹ãã Aãåšåº«æ°4ãèªã¿åã3ãèšå®ããéã«ããªã³ã©ã€ã³ã¹ãã¢ã®ã·ã¹ãã Bã§ãåãååXãè³Œå ¥ããããšããŸãããããªã³ã©ã€ã³ã¹ãã¢ãå®åºèãšåæ§ã«åšåº«æ°4ãèªã¿åããæ°ããåšåº«æ°3ãèšå®ããããšããŸãããã®ãããªç¶æ³ã§ã¯ãäžèšã®ããã«å®éã«ã¯2ã€ã®è£œåã売ããŠããã«ãããããããåšåº«æ°ã¯3ãšãªã£ãŠããŸããŸãã
ãã®ãšãäœãåé¡ããšãããšã補åXã®åšåº«æ°ãšããåããªãœãŒã¹ãåæã«ã¹ã¬ããAãšã¹ã¬ããBããã¢ã¯ã»ã¹ããŠããŸã£ãããšã§ããAãåšåº«æ°ã4 -> 3ã«æŽæ°ããããšã«ãBãæ¬æ¥ã§ããã°3 -> 2ã«ãã¹ããšãããå€ãæ å ±ãåç §ããŠ4 -> 3ã«å€æŽããã€ããã§3 -> 3ãžãšå€æŽããŠããŸã£ãŠããŸãã
ãã®ãããªåŠçãé²ãããã«ã¯ã¹ã¬ããéã§åæãè¡ãå¿ èŠããããŸããå ·äœçã«ã¯ãªãœãŒã¹Xãã¹ã¬ããAãæäœããŠããéã¯ãã¹ã¬ããBã¯ããã«ã¢ã¯ã»ã¹ã§ããªãããã«ããŠåŸ ãããŠããŸãã°ããã®ã§ããåŠçã®æµããšããŠã¯ä»¥äžã®å³ã®ããã«ãªããŸãã
ãããå®çŸããããã«ã¯ã»ããã©ãããã¯ãšåŒã°ããæä»å¶åŸ¡ãè¡ããŸããæä»å¶åŸ¡ã¯èªãã§åã®ããšãã»ãã®ã¹ã¬ããã«å®è¡ãããªãå¶åŸ¡ã§ãããå ·äœçã«ã¯ãããç¹å®ã®åŠçãããŠããéã¯ãã»ãã®ã¹ã¬ããã¯ãã®åŠçãåæå®è¡ããã«çµãããŸã§åŸ ã€ãããšãå®çŸããŸããPythonã«ã¯ããã€ãã®æä»å¶åŸ¡ã®ææ³ããããŸãããä»åã¯äžçªç°¡åãªthreading.Lockã䜿ããŸãã
ãŸãåèã®ããã«æä»å¶åŸ¡ãããªãããã°ã©ã ãæžããŠã¿ãŸãã2ã€ã®ã¹ã¬ããããã¢ã¯ã»ã¹ãããå ±éãªãœãŒã¹ãglobal_counterã§ãããã5ãšãªã£ãŠããŸã(è£è¶³:ã¡ãœããrunå ã®global global_counterã¯ã°ããŒãã«å€æ°ã«ã¢ã¯ã»ã¹ããããã®å®£èš)ãåã¹ã¬ããã¯ããã®å€ãèªã¿èŸŒããäœæ¥ããã(sleep)ã1æžãããå€ãæžã蟌ãããšããäœæ¥ãããŸãã2ã€ã®ã¹ã¬ããããã®åŠçãããã°ãglobal_valueã¯3ãšãªã£ãŠã»ãããšããã§ãããç¹å®æ¡ä»¶ã«ãããŠã¯3ã«ãªããŸããã
import threading, time
global_counter = 5
class MyThread(threading.Thread):
def __init__(self, name, sleep_time):
threading.Thread.__init__(self)
self.name = name
self.sleep_time = sleep_time
def run(self):
global global_counter
# read
count = global_counter
print(self.name + ': read global_value ' + str(global_counter))
# do something
print(self.name + ': do something')
time.sleep(self.sleep_time)
# write
global_counter = count - 1
print(self.name + ': write global_value ' + str(global_counter))
thread1 = MyThread('A', 5)
thread2 = MyThread('B', 3)
thread1.start()
time.sleep(1)
thread2.start()
thread1.join()
thread2.join()
print('Result: ' + str(global_counter))
ãããå®è¡ãããšä»¥äžã®ãããªåºåãåŸãããæçµçã«global_valueã4ã«ãªã£ãŠããããšãããããŸãã
A: read global_value 5
A: do something
B: read global_value 5
B: do something
B: write global_value 4
A: write global_value 4
Result: 4
æä»å¶åŸ¡ã䜿ã£ãã³ãŒãã«æžããªãããŠã¿ãŸããæ³šç®ããŠã»ããã®ã¯global_lock倿°ã®äœ¿ãæ¹ã§ãã
import threading, time
global_counter = 5
global_lock = threading.Lock() # LOCK OBJECT
class MyThread(threading.Thread):
def __init__(self, name, sleep_time):
threading.Thread.__init__(self)
self.name = name
self.sleep_time = sleep_time
def run(self):
global global_counter
global global_lock
# LOCK
global_lock.acquire()
count = global_counter
print(self.name + ': read global_value ' + str(global_counter))
print(self.name + ': do something')
time.sleep(self.sleep_time)
global_counter = count - 1
print(self.name + ': write global_value ' + str(global_counter))
# RELEASE
global_lock.release()
ãŸããæä»å¶åŸ¡ã®ããã®ãªããžã§ã¯ããäœã£ãŠããŸãããããŠæä»å¶åŸ¡ãéå§ãããå Žåã¯ãã®ãªããžã§ã¯ããlockããäœæ¥ãè¡ããreleaseããŸãã ããã¹ã¬ãããlockãããŠããå Žåã¯ãå¥ã®ã¹ã¬ããã¯ãlockããç®æãã§åŸ æ©ãããªãœãŒã¹ãreleaseããããšã次ã¯èªåãlockãããŸãã
ãã®ãããå®è¡çµæã¯ä»¥äžã®ããã«å€ãããŸãã
A: read global_value 5
A: do something
A: write global_value 4
B: read global_value 4
B: do something
B: write global_value 3
Result: 3
ã¹ã¬ããAãlockããŠããreleaseãããŸã§ãã¹ã¬ããBã¯readãwriteåŠçãã§ããŸããããã®ããããªãœãŒã¹ç«¶åãçºçããã«åé¡ãåé¿ã§ããŠããŸãããªããreleaseãããããšã決ããŠå¿ããªãã§ãã ãããããšãã°äŸå€ãçºçããŠreleaseããã³ãŒããé£ã°ãããŠããŸã£ããšããå Žåã§ããlockãããåŠçãã©ã®ã¹ã¬ãããå®è¡ã§ããªããªããŸããä»åã¯threading.Lockã®ã€ã³ã¹ã¿ã³ã¹ãglobal倿°ã§å®çŸ©ããŸããããåãã¯ã©ã¹ã®ã¹ã¬ããã ãã§åæããšãã®ã§ããã°ã¯ã©ã¹å€æ°ãå©çšããããšãæšå¥šããŸãã
ãªããããã¯ãšãªãªãŒã¹ãè€æ°ã®ãªãœãŒã¹ã«å¯ŸããŠå¥ã ã«è¡ããšãããããã¯ãšãã£ãåé¡ãçºçãããŸããèå³ãããããã¯èª¿ã¹ãŠã¿ãŠãã ãããè€éãªãã«ãã¹ã¬ããã®ããã°ã©ã ãèšèšããããšããããã°ããããšãéåžžã«å°é£ãªã®ã§ãå¯èœãªãããã·ã³ãã«ãªäœ¿ãæ¹ãå¿ãããŠãã ããã
ãã«ãã¹ã¬ãã以å€ã®äžŠååæ¹æ³
ååãä»åãšãã«ãã¹ã¬ããã䜿ã£ã䞊ååŠçã«ã€ããŠæ±ããŸãããåã«äžŠååŠçããããã ãã§ããã°ãã«ãã¹ã¬ãã以å€ã«ãããã€ãã®ææ³ãããã®ã§ç°¡åã«ç޹ä»ããŸãã
ãŸããã·ã³ã°ã«ã¹ã¬ããã®Pythonã®ããã°ã©ã ãè€æ°åæã«èµ°ããããšããææ³ããããŸããããšãã°Unixã«è¿ãç°å¢ã䜿ã£ãŠããå Žåãç¹å®ã®ã³ãã³ããããã¯ã°ã©ãŠã³ãã§å®è¡ãããããšãç°¡åã«ã§ããŸããã·ã§ã«ã¹ã¯ãªããã䜿ã£ãŠããPythonã³ãã³ããããã¯ã°ã©ã³ãã§å®è¡ -> åãããã°ã©ã ãå¿ èŠãªæ°ã ãå®è¡ããªã©ãšããããšã§éåžžã®Pythonã®ããã°ã©ã ã䞊åã«èµ°ãããããšãã§ããŸãã
ãŸããPythonãã·ã§ã«ã®ã³ãã³ããçºè¡ã§ãããšä»¥åã話ãããŸãããããããå©çšããŠPythonã®ãã«ãã¹ã¬ããã䜿ã£ãŠãPythonã³ãã³ããåŒã³åºããšããäœ¿ãæ¹ãã§ããŸããã¡ã€ã³ãšãªãåŠçãã®ãã®ããã«ãã¹ã¬ããåããã®ã§ã¯ãªãããããŸã§ãã³ãã³ãã®åŒã³åºãã ãããã«ãã¹ã¬ããåããŠããã®ã§ãããã°ã©ã ã®èšèšã¯æ¥µããŠã·ã³ãã«ã«ãªããŸããã»ãã«ã䞊ååã®ææ³ãæŠå¿µã¯ãããããšãããŸãã®ã§èå³ãããããã¯èª¿ã¹ãŠã¿ãŠãã ããã
次åã¯Pythonã§ã®ãããã°ã«ã€ããŠæ±ããŸãã
å·çè
玹ä»äŒè€è£äž(ITO Yuichi)ã·ã¹ã³ã·ã¹ãã ãºã§ã®æ¥åãšå€§åŠã§ã®ç 究掻åã§ã³ã³ãã¥ãŒã¿ãããã¯ãŒã¯ã«6幎é¢ãããå°éã¯L2/L3 Switching ãšããŒã¿ã»ã³ã¿ãŒé¢é£æè¡ããã³SDNãTACãšããŠã·ã¹ã³é¡§å®¢ã®ãã¯ãã«ã«ãµããŒãæ¥åã«åŸäºã瀟å åãã®ãœãããŠã§ã¢é¢é£ã®ãã¬ãŒãã³ã°ããã³ããŒã¿ã»ã³ã¿ãšSDNé¢ä¿ã®å€éšè¬æŒãªã©ãè¡ãã ããšããšä»®æ³ãããã¯ãŒã¯é¢é£æè¡ã®ç ç©¶éçºã«åŸäºããŠããããšãããããããã¯ãŒã¯ã ãã§ãªãããã°ã©ãã³ã°ãLinuxé¢é£æè¡ã«ã粟éãCisco瀟å å€åãã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°ããŒã«ã®éçºããè¶£å³ã§é³å£°åæåŠçã®ã¢ããªã±ãŒã·ã§ã³ããµãŒãã¹ãéçºã Cisco CCIE R&S, Red Hat Certified Engineer, Oracle Java Gold,2009幎床 IPA æªèžãããžã§ã¯ãæ¡æ 詳现(è±èª)ã¯ãã¡ã |
|---|


